{"_id":"@atomist/sdm-pack-fingerprints","_rev":"656-c0b54b2264208f8ce4813a7f842fe027","name":"@atomist/sdm-pack-fingerprints","dist-tags":{"branch-master":"5.0.0-master.20190903060131","latest":"4.0.4","next":"5.0.0-master.20190903060131"},"versions":{"0.1.0-20180716062100":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.0-20180716062100","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.2.1"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"0.3.2-20180716044057","@atomist/sdm-core":"0.3.2-20180716045144","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^3.3.0","tslint":"^5.9.1","typedoc":"^0.11.1","typescript":"2.8.3","typescript-formatter":"^7.2.0"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"b7735f3747e20cce5af4a151e15c4b7c8d7a2144","_id":"@atomist/sdm-pack-fingerprints@0.1.0-20180716062100","_npmVersion":"6.1.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-IjVzjvSZzBoyGTUQesgC0IrkDcc7TEPwRfd0PC0Wn9fqibUp1XgEha9BAOj8lCfl1mav/H/DW9QG/a+1UI54SQ==","shasum":"d8ac1f9e6afd89c013dc581c8b7752737b30033f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.0-20180716062100.tgz","fileCount":47,"unpackedSize":207139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTDnECRA9TVsSAnZWagAAPoYP/1RGlJVE/aJxmeS5wDVD\n6bMBezM9S9pBrrWJ+rqijT80NFHL7SmVfs1ebmjtG6AFaVhODtXvslTrtxke\nymbobLVuxKiiKB6TEmA3qTjvhFpp0ZykQhv9/LK1fWn4r+y8+Kx0Grm8fYmj\n+Rb3PzEjTMW9iZOS4YE1P0I0BSWmJVHGvKXKyxopHlnRGDFsJDPffqCs4f8S\nZzvbgeRMSGZHdzfaw5DQBhzicm3sguISS5/ZaLPKahw2P5hUaDzdzZAQ9f4J\n0EsTmJ2HZTJ6gdavfLyiDncvPeHZcVNvj3BqU991tdG2kFIisPGaPWdCKNtg\nzm8r9KolAlWyU4Nr6FXMFhaeiNr3a7FB74zSkn+fXBC6EecHOK/CIxSWtq4Y\nH2h6xQ43ohd66Cl57UV1VkeD+B3cXif++0QVkGKK0mVK80PTz3LAZTT1/6HZ\ngra9IdbO4j5SchSMhrpxnCYwPs9NDuTsWSINcXdOd/TbkW2Ek3mmLJQ8wnu8\no4B+Cpwugpp73WlVWxpE+pj/wYrDVyNL21ABflHxFyrVRbi4nS4JTOAo+R8+\nWIjJug2fIhr2Da12Elo0YDVs0ln90k98kG0qnQDep4VDtpRq5BvHTNDj4Tps\nrvIX+wVaok+6/Kz4GHAT5/nslx4o4V/4Mb48YcCbqM7psT844rzj1h1y9Nus\n0v2R\r\n=sxZO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHz0s9WVGKuShcvc51HMw308hNRWtQ8CaoEtpFWZKddECIQDK75usZtz5iYn+NqGqqXOBblKPEa2i/+CNq3ndHdfyEw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.0-20180716062100_1531722180498_0.11713304846655626"},"_hasShrinkwrap":false},"0.1.0-20180716064044":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.0-20180716064044","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.2.1"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"0.3.2-20180716044057","@atomist/sdm-core":"0.3.2-20180716045144","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^3.3.0","tslint":"^5.9.1","typedoc":"^0.11.1","typescript":"2.8.3","typescript-formatter":"^7.2.0"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"989845a47ddc7a71ac89bb6bb0a1b84bea1c497e","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.0-20180716064044","_npmVersion":"6.1.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-bdOhP9OK/7vMntK5hrykLp3wUu1PmKq8LyG2zGeo2SXt5AvlabBMI9jNB+LsTjit2TGhXO4cTrC619eiiavdDg==","shasum":"0104572f87620708347b8b3bce97b5e5dd5c219c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.0-20180716064044.tgz","fileCount":51,"unpackedSize":209464,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTD5sCRA9TVsSAnZWagAAEBkQAKCS5HFDn32WRVfRbF8i\nt6NdRr5LpLcO7jaTtdCmourdRho1jByQDzTkaiwijoUszx4asfLTra5l8a7U\nRrsBOlcb4P9d1zwgwV5ljmr/sdRbTLCiJr0OmC2rxQUzsEwgmwBT4xLzz8I/\nqfmVHBwOLWiNzOc9U+rvmRt+FctQLIz32BrUDUcywvCoiZzINWUEee3nE1jL\n7dzs31OJpyHhaow7wXIX0bGVfIdJHbUEM5njOuenicy9g9Pu71brjVe8Dp5l\n6ZFlUr6ICr2zq3GTZnC7ut4bYUdmJtBcfuU2eX8CQL4m39IyV1fz/bkx+EQw\nbeFZra7gP7SaT0Lff8b72lUXcEq1En2S+Zw+4XEoPc6PLTMIF1ArEJAhgzoa\n2bnrC03fizPZ2qnHOvClQDNoDIxSVA6epzg9oPjJk/Hv9835rZk70B/b90wD\nhL6oSD9zC9otQunuO6yYDNxGzWYeDWAFxJq2JYvuv0pxoXQeO7CIZF6bPo63\n7y9oLAMRsf4JZdkDSJppbobhA1eQSMB+UqDPGluplUKc8OVbe065ZMBC7bJz\nBmYga1jIZVrYELyvUys5Sl/igWrl3EE12N7ZBp6Ty/Cy73wc49FQ7HlEgaFm\nE8G4M2JzkHl89h4iLwpuXEyj/fXLA1BehvomqD7kV3czbpd165SxN6EDd+b1\nlpl6\r\n=Nkn2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+lg5h1ou4/XMdL5dEfv/YCIE0hpeskke/zh1ndXKIaAiEA1cbZV2XAT+3VHsq6P3kqdlggUDLBZRRZuM+zmQxtIoQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.0-20180716064044_1531723372763_0.8470955163272844"},"_hasShrinkwrap":false},"0.1.1":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.2.3"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"0.3.2-20180716044057","@atomist/sdm-core":"0.3.2-20180716045144","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^3.3.0","tslint":"^5.9.1","typedoc":"^0.11.1","typescript":"2.8.3","typescript-formatter":"^7.2.0"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"4fa97570760bfe15b258d07756d34426e906320e","_id":"@atomist/sdm-pack-fingerprints@0.1.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-jwddP8IZt2rRJz9s1ujzVTxdRHVEiL1rLmkjjtm80Qkv3VFmG9r3k4oCpwtmi+wdkdwvjq8EJWaPp1/7wRkOFw==","shasum":"04bd4115339b91973719275c870974225a93ac81","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.1.tgz","fileCount":16,"unpackedSize":18026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUEHvCRA9TVsSAnZWagAAJaAP+gP5HsMZ2Aiof9h4RA3a\nSbClep0Hq6rbtNFghjEpsQw4xmvMKQndmaSC7LxPYeEmB/pmq1YVbYakRbov\nhFqtSvran03RtSOuqCJPw0uBr4VcIo4TxDKMqTCiYLKK7xoe4eMWpneJ/elf\nFuu9wvcQXQlWymRmKh8kgyQ2IjUTXlfOIRlWQC5eGhC6LP1xMlMGYFfN5eLw\nR6E58SuOJaIMRFGOmalUuz+xVROJk17yjPa5eM2Vvg7EvZ6ohrUgvBzaspsb\nQbh53KkyVRMPDGj7O2Y2UQoW/T8+STF7OeJiJXOuhOnN0Qu514KFXd4gvNRt\nqNNcElwEimKssoWFXJqX51x9qqItJA/CUhqhmSkpfdk2wL5mWkEGf6FYROm7\nbyLfechBA7zMSSeiSSNOwXlAgqDjVCFoSJiFrmV/WfwgeOPLhyJGyiSTXhbw\nlW3XuuWwyM0hdQuyMM5doxbyelftAxjI1SCR+KrOrUQsrQO9iIjemwQmxoSN\nBpuCmqrf7dn50iCKiwnUINWEOBHQlbU2LFaMGL9Ga5teFMuKjrjZvd6emaa3\nSrOmc97JfJ9qvHsuOLJ86gejU46NZV4/Wrpph8v+vVwXzlOPYYxFKGYCBXU2\nCdGf5V1E5o3KggAF/wos5rV1xadKf63a0JtUzmlTNQy8jgbEp6ww9f++8Ksl\nZAJZ\r\n=uEfA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpr/0Buh/Mu2cBfcKXow58OjX7ZMN3lfEmE25aZaVTtQIgMbfpXAnLlUvKGuVg9r270M4l614H82xC5+QwtcNOe7Y="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.1_1531986415577_0.6549977424707449"},"_hasShrinkwrap":false},"0.1.2":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.2.3"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"0.3.2-20180716044057","@atomist/sdm-core":"0.3.2-20180716045144","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^3.3.0","tslint":"^5.9.1","typedoc":"^0.11.1","typescript":"2.8.3","typescript-formatter":"^7.2.0"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"4fa97570760bfe15b258d07756d34426e906320e","_id":"@atomist/sdm-pack-fingerprints@0.1.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-+lVulusSIPjMJdpF5q2lby1QXtKmqiBCeRxT08+gDh0Sxmz0a9+l96L+7l0aBip7c1pvXLVyd3yCKd32ABUN4Q==","shasum":"9a8f7c1ce5e6dadcffad781b0f413d817faca506","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.2.tgz","fileCount":15,"unpackedSize":17831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUEaJCRA9TVsSAnZWagAAnp8P+wT0p81LpZe5Vd/v2jfU\nde5VKuWzeq5KODj2/GNZoWpJwbUDtW4fqRuO/16tCm/ocDLU91OGZfPjJG6W\npmWnaokkweTifbw3Xkj+C9/1hJfkmG6Zj+KxcZc46pvB9wOjl2/thyalOJKF\nUjhsuHH+kOH66f62zPSL1K3e8Fr0y4TZjjBxHzUkBEsLtFpoFhRFSTvyxz6h\nxnGVzyScKHsy7crJjkZQU5mEeKU2+GIkdzuY2fRFgxPZbQpMXqEawxOsG+6o\nvQ9CfvPVKWat05S/Eh7RDdCoCSq/9KdOq4ksmFlFGCPSQoj1I+N+PX7rzRze\nVBls4cK6tpOdY+NDwEIGlU4Bx8GSH+vYRPmVa6pbh8j8UZiwmlwHhq6dyw3j\nBhtyr0lnRLk1S4+gE2LoyhMm9pIf+puX5eAUXKZKuqds/G+55AjxrG2Z+mWQ\nd0u6w5lMIH/Z5jur5hfTD/wjZOkihRXM39OCWUsZgV0Q/YHWhtrE5dfC0d4p\nDI2GwoQyU3woPy9jpvHrdNKzPBFZ2DnwyF7N8v47ba6pl8JRkD4ICrKqZE4D\nDIgxDTVhAUODkVxanKf7tiFedRnl4YaFerdC747q3VuD1v+PDpIHmesM3iap\n7juURZ7B4xpSotnmTe7mqJIp9ntP733Tuexl2fm1woZdSWLtsuTqYIBBjeXn\nYHQU\r\n=DVc+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBRDqlQwR6/Xnl7rL90OAPgLRwPQt6yFhfYWKJU7ismzAiBy0qydVhwUPcj2RL6+Da1ZTFUb0JsqgW8OI0twPqrb/A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.2_1531987593625_0.1910052652041807"},"_hasShrinkwrap":false},"0.1.3-polishing.20180727002807":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-polishing.20180727002807","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.3.1"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"https://r.atomist.com/1769963991","@atomist/sdm-core":"0.3.2-20180716045144","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"20dd165e52684f671df2a5660033aee79838f912","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-polishing.20180727002807","_npmVersion":"6.2.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Xy9ZRlBLLOiX0QnIq5AxobJAj0BeynWG7p7UKs8oaIWZo3mHPcRnXZ/7wOUip047BpEVgRq7Wckh666rUTlVyw==","shasum":"fe8a2c8cc0a4da3e38c2599fe02c82b44c0e251f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-polishing.20180727002807.tgz","fileCount":86,"unpackedSize":344260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWmeYCRA9TVsSAnZWagAAW9UP/04NchHYUrEVYm5v0hnC\nThKa5jzgQfD14igKsK0JcYINUlEBQUa6wI/wUEfhpQ9vDvGZbUzvMdOgy6Io\nOZqRXNTxcmro0NkL/NS3csuZSyF+PITm4KciHNbRbBP1CCZOrDVYVgyqcvcF\nN9rzB91Mlu3zNFKPpsvkTNCXqNAM9HMXDYKLPoYC8c8pN/1Nvyvw2XefejLj\nTBLAt4m0+pYYmbf5vDhA8mzPjhQH7lIv4CTAPJwLUW31xlAhXqq1nkcw32NI\nC8fd7fov2wTQrMFhHTblvf6U1cJOPdZ9DwaNuxJjdQ2Mgo9KkQLwNy0Fje/O\nIQkeqTee1+WaemwCIaN0DQPCe8Q2Pbcv7QKTePJItpfwQWJeuK/YeBhvSbk3\nf4LfjIMM2qS0UIfI8lFGVIEhgqGWNeXZdWfw9boWtgYmYApk4dVCOHaQmhLB\n3dTz3BsDLkIV2+SEtaKse467zfYAGpxvpfAc3AEZu7YpYHPnfyYruyZc8lYv\nb4QJbC8CK3hOHdvlT92EBN3jy7R6S0NylI7snM3S5wG1m64qiyCwAhxBBEy9\nTzrZRCONlJMJIE8KMgNf+ZrlKvQpgZaKy8/2uQamhLGsVENt36k6DvshCIDa\n6RtG4+DXzsMwBoZE6U+GqRZfN0K+r5D78ICkXZgbGNzjL2WhUWy3mC/nRRvd\n3BDS\r\n=Lj8t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtCiObnJp3sWbMR603X07f5ccZ1DZuaVAwP894s4m5AQIhAJB88mUrguxGkY/lrkTVroiCwJtuJErvMG787NK040vn"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-polishing.20180727002807_1532651415901_0.11246718022282831"},"_hasShrinkwrap":false},"0.1.3-polishing.20180727003719":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-polishing.20180727003719","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.3.1"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180704102519","@atomist/sdm":"https://r.atomist.com/3513354669","@atomist/sdm-core":"0.3.2-20180716045144","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"71084e2acde89c5c8e4c33104c22410d0d9abb4d","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-polishing.20180727003719","_npmVersion":"6.2.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Fs6v5st4kiU2FVyd739Ch7Rfd4iJEm/JSxCWkWJ7mpBHiTH1QOPeDnTL3iqNd3qlOat5NtmrkNWTBGQiydVLuA==","shasum":"4ce67fec2d1c87009c87d3fadac604024a76cf02","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-polishing.20180727003719.tgz","fileCount":86,"unpackedSize":343548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWmm3CRA9TVsSAnZWagAAnTAP/jafWtCsUVmaD/ViRNH7\nzOgyOHQ7uwe58P4WCrKTZGel/WlGEDQqMlgwILa3XNtowoUidaJBMU3r8U7Y\ndI9N46arf9cIj+kXxjQBAFm7kqN4ZeN9aBk1NjLO210Q5vCI9AfHXjyR4lpD\nAxElkOvwzjE01EOoVlXSnEMNXI0RynBrLPIi3C5FQyYmbBXqt8j9exrL/fjk\neuqeFGQmFYJtADAwboeS1QoPuTK3+157GZ6EVRJJbtVnm39gLq2vIwilA4rc\nbf8r0B+BJySVFYFMb2zJvUGXW0jc/2hu8olKFmbWuJBP6IWVgqykfyZjKiPZ\nfCs6jMBCBukvKoPBamDUqH1iMPAeNB+BPcY2g++St5EfkZAPT+Iw04THP74/\nW3cC9IJ479uVLffwivuVjLzlIA+4LlFuSMkTAmzSoEizaQAQDvOBqKnboNz4\nJI0QX1XmQdN/gbLeRbUdMrvq0xu4QMZygQFk0QZlv1PMGRZDOItkUIA+w/Bp\ncaUGTHU7Qg/icXgMrVMGU84REu4A+GqTlsbmbz2hm9/p/v+lTC5e8aK2BvZJ\n9H4FQMdT3I2y6qXyYTWZdiKo4UxjZgkvP8PJKm2KzO7S9u5zSjHJ2oQcp721\ntaVhn2rQS0i1oLrPvfcKYKBikGniWg62yGYEGBB2zw7s3kVv1cihyBV+jwre\n5e7S\r\n=IR2r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1c7kW4ogIG5/S1eCefoh6NuY7pAg/O9KxeshQQI/WJAiBxJeLCjREjo7IP5bMfXYkay4pGPhSW5FWUu4o7v7Ym0g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-polishing.20180727003719_1532651959774_0.15921007302016466"},"_hasShrinkwrap":false},"0.1.3-polishing.20180727024619":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-polishing.20180727024619","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.3.2"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"6538d756551eb502c0fbd27740bbfa4f2d11e940","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-polishing.20180727024619","_npmVersion":"6.2.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-khwrvYDiNbPQ7wyvKj7D/BYnjHCQrnX5gvLz4jsvykFlkIv/92px4e++2JZn1ufigMjuvP5E1pzK+9zdAAQfkQ==","shasum":"538c5fb1d0c63609f8ab8af58dd06b2597fd26bb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-polishing.20180727024619.tgz","fileCount":86,"unpackedSize":343805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWofoCRA9TVsSAnZWagAA5O4QAI8sMn7b6fx0kAbqbrw4\nTmVmQjDycf1COTvKry39E2bmc0YrcxOmvNCoxlMubD3J5dFnJcFGQaGYsKNV\n8v1wVtDSqoGqbaBMqMNaV+Q/qm1zCeHK1iT+RgCKPTL9dVzULFpBysHr0hAW\nV69xz7EMjgbRAT5JIMY3rRoQU9PpOzyIGGhMp6nYR7Bg4wnPmUdRJn8WkfdY\nkADayjW+iOwiTjdQQlXthtaCdXrPWDDMnXH09N2YYQPNog7qjNHcaLoLYjgp\njOjzufn6RU/feGRoyhCYM18eyQsaGWRpHf4Ellqu2/iIw1iPVtUKCBCQTfG+\n1Rks7/7nyp/CWA1WmsB6HqRXKoqCc+Fc6w6aji1X95D3eSK0eLQhq7WvYO4b\nIF8NBYUEXV3Q4OUPcXwuRBPSifQbd694C9vRDZjb0e9LBRpMO9FQgk18g4oA\niRMJwCiKEpIg5mxrgouzax1RpYInhPd3QHwiCZVOMFZTKbKdLg6wy0Mrq9GB\nEDD+aKxBtGj3k83zjt0z02lvceBrx2wB9AFOpzeEuiGbKRHBIZ2JxEHofKZc\nOe427TjORNrUwxQ1PqaHvD8+UYO+skCEk/59pubnW9ogitv3V2ANUruurFeE\n1r7WyKD7bjU/lbo0i/yIJ4ZfDFy0sIjnpwES6Ukp418OYhqOMGYhz2WVQUYk\nYs4E\r\n=GPgF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYijh6fQXTV86hw6T9B5BGmPqApDyyQfU6NQnVTsQefQIgWGDrkiw03woi0vYR/3lxUFj4mcWmtrMEbK/riig4aCU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-polishing.20180727024619_1532659688707_0.778063567155082"},"_hasShrinkwrap":false},"0.1.3-20180727025051":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-20180727025051","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.3.2"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/sdm-pack-spring":"0.1.7-20180715090742","@types/mocha":"^2.2.48","@types/node":"^9.4.1","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.11.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"f76ada30532de0e0ec27847dbd736e15dadf70ad","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-20180727025051","_npmVersion":"6.2.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-N/alfUBa8UxH0Wna5aiLs0hP4L3+Q2X3kXYnQCBVty8T5CbaWte4EFveVrzYmMe2vbnrIRT8J0NlPthr9Nt5QA==","shasum":"07fcb84e249dc7335cb60b673fe956ccbf5ecea4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-20180727025051.tgz","fileCount":86,"unpackedSize":343795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWokBCRA9TVsSAnZWagAAOnwQAJ1O3Go4YfHWKQ+TLopC\nZiwRlCr6Z52/Wmy6WmXMEICiEatMSAmzwBEKbIDCQE4Xq4uEGk8zFj782Sib\nikyFnDssAEX42D+HLkFfOzjNIxt+E1QS+cDFgd5SdVr/7DPV7tAYwc/oHGIK\n3zv3Vt+M7/4GhgWbWPbfhevRIAgvSMEfTs2VTSpdC/TpOsaj+t2jv8ssPSMY\n/1vKbl1ynEIspjiM7GVCN2pmi4uxKer8MQymYwWeq4vkjmS1xEBXXNpZiJwG\nawb2ZGcISzkkCepOmTJ+AAQhKj41Y4lltmgPgaiPZkzcsXl3ER3pbzavNKZl\n9ENiTdLLlfB/O/McPF0ibiYMEIaJ8HewXCYE2CwwNnuXId7/gjfZ5R+RDV5G\n1ZEbkp3qLmzF7Pxr9rAdAUJD6/xnYOG8cyL884RliXLNJ6v+BFqA0TmtgZkN\neKFhanj5wICFy7M9fLICTEp2oXONhejR4lh9dMwcCxKG8/REkJekoII1Vxq9\njtrLYrm206JLjSnaswJ9j07FKWXcdgUQ0g2IdCV7PlMv4mpKww/GWYmZex9P\nNYUj1u7iatf9uHz1yP4F48XpwBNdwIhsEZstnESSzfeVwvlCKlGnL5r/R4oa\nqKFCj+ybRZ8mS6xUJ9rXOGS+eJwpZO7whg5m4Iqo6M4Z4k3EgPhs9FH/bdx1\na35S\r\n=xKFD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp85KcU7Nw1HK8pXO1J5Yj9Gx24+bPn+2KhVVCjLBEtgIgfs6Iki3tnik00Z9m6jf/SLNPrX4O+mH5JF1uHTtS+mU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-20180727025051_1532659969041_0.9083819296362066"},"_hasShrinkwrap":false},"0.1.3-20180803015453":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-20180803015453","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"4b8d04b5562bbef82ceb8fd607b3b29d08315818","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-20180803015453","_npmVersion":"6.3.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-y03vEwHpIxZg+jajdnOGOgBBfIl0Y3FD5xlIKWGvzRSy/RIDZ0j6jLwM4WhpNab3lBQOqmqYx2lusYBcd83VZQ==","shasum":"cfc71d56f192c53f2aa68d4ff54fa8a723b57359","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-20180803015453.tgz","fileCount":86,"unpackedSize":351326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbY7ZJCRA9TVsSAnZWagAALlMQAKTYbXhYsLWBYaX94D67\n8xou8X0YCqEvZU3UInQEsuQrTgYEvX3nA/Tc2J5q8aezD/CY2bdmOcJkVeLQ\nWKJxaJFyNb3c+iDYJWZ83CuQCzn9RFTOPVDBKKycENaYOgNuhNF/HtCNZX3s\n69im/IkWHTSRJikTpRQrjF+dGu3F4oJ5vSUCAuy6Py2Hm7Q2WK/vequDLJTm\ntPg1BEH2PkDjkloi0bqtJXyCRy7VzksIe0/oZQkbhNu7G42oAmatjveVg7E0\nia5feYo46nRKb2hcHiQ+1L7M+GH4ofhcQ3gGLQM+643JPjEz/NxqOT9BB3dK\naph/zVxEDHCe4g8NxlKdxaBsoR23pLRM59h6lbVHmmk41UFPTJsd4KQqCG9R\nWhIUjoSZOnSSlockgBLA//u8byXMaW0+j8CvOUmV6sIna5Nuqjmp5TiBsaqt\npojWF8DqofltQ85YSQP5ugEvoiDAFW368Ii36hzc/JBVY4NN6PlFvJuaVGn1\nNk9W1fXKF4JdshwHWYpv/YCsPcehKhqLEtjujUEl18PeHn9BrJt5LKZNAxz9\n+QDBX0OaSNjuq26VJyf6Q5m6GKaQ004qOeThhlbbYSKG2r9+QmCk/zubShPk\nTK/OjoL5vrAdmBQGkHsPIdvrvVt1O3xwrlpqJQhqd31dWlublhqOe3+2g9HT\n2rDR\r\n=dF3r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9YOmEIsA36AlnKw4/0gDSnW8Q/TBNvvFtE70dQz+YUQIgFPmRUPBrdU1o5z7hcOyQUb2OwQKANVy0zLUrhT4J8xo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-20180803015453_1533261384800_0.9714104065321183"},"_hasShrinkwrap":false},"0.1.3-20180803015639":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.3-20180803015639","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autostart":"npm-run-all --print-label --parallel watch:compile watch","autotest":"supervisor --watch src,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint typedoc","clean":"npm-run-all clean:js clean:build","clean:build":"rimraf *-v8.log profile.txt build","clean:dist":"npm-run-all clean clean:npm","clean:js":"rimraf \"{src,test}/**/*.js\"","clean:npm":"rimraf node_modules","compile":"npm-run-all git:info compile:gql compile:ts","compile:gql":"npm-run-all gql:gen gql:copy","compile:ts":"tsc --project .","debug":"node $NODE_DEBUG_OPTION node_modules/@atomist/automation-client/start.client.js","fmt":"npm-run-all fmt:ts fmt:gql","fmt:ts":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atomist git","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atomist gql-gen --no-install \"src/graphql/**/*.graphql\"","lint":"npm-run-all lint:ts","lint:ts":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" \"**/*.ts\"","lint:gql":"prettier --list-different \"src/graphql/**/*.graphql\"","lint:fix":"npm-run-all lint:ts:fix","lint:ts:fix":"npm run lint:ts -- --fix","start":"atomist start --no-install --no-compile","test":"mocha --exit --require espower-typescript/guess \"test/**/*.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.ts}\"","typedoc":"typedoc --mode modules --excludeExternals --out build/typedoc src","watch:compile":"tsc --project . --watch","watch":"supervisor --watch build --quiet --exec npm -- run start"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"1d2ef776b693639c576b874deec70fa190d91062","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.3-20180803015639","_npmVersion":"6.3.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-lb/e19PSVnzv7L2ZU5fjS+bevIsItnHACIgjOMvGofMRHBaHxNV6naMnQoQbYRhVI7c5sP+dNJyRJ9lGwPsV5w==","shasum":"20a4dce315925aa6687a73c2d1d7167ab3a2a844","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.3-20180803015639.tgz","fileCount":86,"unpackedSize":349777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbY7bQCRA9TVsSAnZWagAApCQP/R7CvXwA18lYzU6e2sAh\nk2oiki42v3IvtK2IxvTtHHeunN59piidLNyYT4dnDIjdtZYle/Y7NszCAaIb\nBat6WDDpc+WzzBZDj4H5EPDurPMWDzvIAR9vCJ1SrV200YgQYO63GtrtXwmK\nv/YdQSiVYG1y8yIBUYq3MKVk8mG5EDD64XN9ODYZXbwsaWiNiMh4/Tgpzhdu\nKa0SHckm1f642l6FsWlDqJoOV4NEw2mBw9p1jcMzS6zj6CbjqNF4UE8iPm1d\nkFesSc1KW8yqHDjrFHFrwl2hOFywIKalpruoLn0t6o8sSsYNud7qVCaXFtqp\nz9I1dCs7SXh11Qy5eKgPNpLObvy2NmtoOhlvhsnrZP+iGH2/hJ58LRpPp+Ic\nGUbBHZIpnxUKRO9VxKpdMcXTmRM7OZVVgN0o3CEw08GpsLr/8pjuuQKV2bzS\nwHpeaCiPWsMD5uo3FUOwgJm0ZGN9W5W+oKk98Z7TjWvgyp+XRyEsRW4irml8\nTez0DxsZT/4vbTrlGZN3+fmQSxiZutSvmZ7/vWzUCykBKk7vymZllrLT22Nr\nODiF5SwcybwbvW+9+oNYb85FZco98yj8F7vFkMnRrFJAC2etXMHf9LKMm755\nB5T5hl86bTIZDxFdB347fogtahjC+gW9CwjF8vs7IU5OsFlDVMMDLxKY/mqm\nxK9H\r\n=PBL7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8Spi6aMvQKNLQT3xZBU9hwe6gpaOiSzl3khngUEfOIQIgF6slEC8KwJtXefmc6JBYJdONuHbSizBQyDHLGGCOV2w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.3-20180803015639_1533261520392_0.10183559653938445"},"_hasShrinkwrap":false},"0.1.4":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"dfa3731f01ad85cb6db4502a4923f95ea3bd7e38","_id":"@atomist/sdm-pack-fingerprints@0.1.4","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8i+8HTpfYMaG1FTr9J44lLvQU1Iw/i/PktLRig4I9gTu5LI1FszWTk9cvp2DoXFmRS/iL5uLIdO/0vEXFYHZfA==","shasum":"3e3747a4e5ab45fcdd3d01a4d1e5f3cb6bb2c5ce","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.4.tgz","fileCount":20,"unpackedSize":43879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbNA5CRA9TVsSAnZWagAAm/gP/284o3ZYbHDSZ+DX4Fqq\n4BMKauB56pPrkji99a6qTyKogg5YW/asVYaj+tYx5yMld4hx+f0n5wl894gH\n+QgnPSgzUhEUUo9F1y1L+FjzHKshezbAB1wzci4l8Q0re1flSKSm6kNE56aE\nyxTNMPvQPJB19qby3NBCM8dtAtH/9DZrUZZWDnQKPXB5aEkgxiI2oS9oHwcL\nOS1O6CZBMQbb8moYBC8wkpLtyjbXlcB7Pusa7pG/DvZbrXUJVp1ih8PsRLXk\nwhzdOZCGCV1yrD1Ik2iuKuAShMTR6F0+Zb8tDktNw1VXcc72z3Ob+q5mTOzL\nOfxTqRnQ1JsBGsiFlI2fc5LPlSXlHSb8txQfZAnK+DNzifGUB9cCqbC18FNb\nzxggUqhTz4bZobjDup6zNBUJFs2M/OdT4FhFJBsjTPkaNYE/tznD5rNNS1y6\nlpLp8ZRfKMWYa8P1iJlzoKXKzunZoxam96QBFywVimIX+wojtwdxR5BUdkYI\nQyzmI3E6pvl2okqQhgmguYsYDa/ai7KkEaw6ENa96vXZkQX//jEy7Jk1pLO0\nfDFHrU3JVq0xsJLMIB5h748+/pAahNohAb1Mlb6jcoY8AQFVOqsOYIjA4XrH\nh6l/uCnV2pFX56DfZ5dkZhpgF+OXuMgXj5Ts9p/iyHBNX40/LN8/taQlm5yD\n0INR\r\n=0sY8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbr23sFoDXnGFfhK83/opFUsEp6Wt2u57s9RPJb9066AiAIj8/1nX7/TXr4qqKviNsrzZIEVusJmWjA5FgLjuxZJw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.4_1533857848894_0.6482813206800291"},"_hasShrinkwrap":false},"0.1.5":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.5","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"c3c385cb7a9821fafd017656aff59685fd0cc59f","_id":"@atomist/sdm-pack-fingerprints@0.1.5","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-JrDPNlwG8XJDHW5g0Q8YOorFFyc4c/k1ibPl+PLNMzdJIUYvF2F1AbtOW5i1/b6TR9btAxkBktKXQvAMZDB8tA==","shasum":"f06cc4d51d223b8a490daa0e3b485e4306c83120","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.5.tgz","fileCount":20,"unpackedSize":43857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbNMNCRA9TVsSAnZWagAAWQUP/2h+sYfHBRYAioDtE05W\n7MBX0kijUFV4W0XY4fPW4fBwBpq/xgV3PU0+SEienrQZN6mk7KxDI5ZjNVWx\nfMC8j+Mm1jYf/2lnopCuWzcNU/mnvsJAg1HC40NduBWY/Hq6nwHJYDVhl2D8\ni3SzvYHBBoAe3qstTPBoH/kdMQTB15GW2idxrtIYLnjpfTzvlpmS2CJeqAPp\nioQj7U17J76RTI5RaLpWnxNl6gX8794i3qC4oLXo9Hu34DaiH5mUROi5DLcZ\nAyxnbjaqs5yaJhun8MEX7MM6o8FLPYAKXKfwwYzb52IBtwJtXgskZakj+S8O\nPVZKpZAfqMYr0uspdTFC2V6DwXB+5ZuREEFA/xofO3vFlgVM6FH4fBoiGyfz\nwnDPvggaFDPiQ5s6imCeeBPinfxdP0Q9YLR27GKVo1fj67c38Zsdpj9EozEM\nA2DhH0ztZAZM+z7BL79sb2M86QkW+T+OT3wJBX+SeuDtzYDNo9qUkTDYJAZh\nyolQbmS2MlDIEIECiJX/SzKgG8YIVFYiD0AO3noSCI8aw7N4Dw+/GQVYAwGo\n0sgwZ0314Dl5ddAVN9w0HHaYTNF76YVMeQUf8c//+55BCDR/Wr5xlqgZXh1k\nY8wLvNxpZd65vQRmDhVvs6JRXhLzY7frRKvFRTnJp4I7FMsSyyZcovC88gDK\nXbUi\r\n=wyNg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx8jk1MjPwxDvRLcMPn0FlhdK0NfngFGx6E+Ns7bxgOQIgXbhy257Y1F6TV/MKy2bngtUreHSD+zy0sJEWwYP4S2w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.5_1533858571956_0.4347461355600353"},"_hasShrinkwrap":false},"0.1.6":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.6","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"66b61bb6d9e8cba29b31cb04db93ad2f11622a75","_id":"@atomist/sdm-pack-fingerprints@0.1.6","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-vKqd5lm8pw1u1YsdWQKeHy6Few4rlM/6sUHmvaRVoWK18UJcx0d8iEpxEi19fi0rds1Qxg8LZfnlzxTkK1jF5A==","shasum":"2ce4de6755b09296e329d163bfefb842478fa917","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.6.tgz","fileCount":20,"unpackedSize":43857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbNQUCRA9TVsSAnZWagAAGKsQAI1lrvb//lMpzAdtinK6\nJstVJ4jdkKY1/do73nLv59/fpOefOHk5rs5DPnq+pENE+lnJoHlcwtCaJRVF\nOiLd4QLK6mqeJWqEXzay+ClkezSfUAUF9yqdCyRcYqQTm2n4cBCGZyVqUvqQ\na5VPczIyYWqX+rgMtpx7//b4iqF4dqR9ZSrHVA+r5SGH0LM0SwkKAYjj9yPW\nRoEnVnjzPsnW6EK+NAiSNV4ouhToPbLn6LU6+NwXyR1REOW6mtWxH+UEJP54\nG8OKPc2rmXeGacZUReGgEKqwP5Ts2XCt9QVyDqhkPHbTntjb8drv5L7M5kqj\nwoEDXDOX2T0thhlF/AFxdccmeFKhZEdB2RH5PXe1yKQhfcy1D2zWFQbUNv3N\nCG3If1a4cfPrsL9b50/ScHGmJvU5gD7YIvcLSPaUxKqDisASA1P4pbyJDtiP\n+QWQTCj9nkt1zk2rU+TiSR7XVYmT7P4L6hHoURAUYRUWDJy2MEiXV7rknSi5\n08ol3o6Pe6GgB0sbe7KOeeqzDCABCWDsDJidhgPLn0CZrTE4qKtm7xa4DLUp\nljffOCk4CP39OOgMbmp7b813Kyj3niHFuV8nHHTCyUTAeq/sAZWkeZRc/KaO\nU+GArsmKjdHj+XrYXbOzQuLFextn3qSSlzy9Vj/PG7bm/dzmfI+MyIfWAORO\ne8d/\r\n=hD4d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEhFC39x/BhQsleysdqtKjSVTGFWJFWb/c2xD9omgIfAiAIeizXvo224aHht2zdWGKYVJK8B5Y4HxCUTGy2DoO3VA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.6_1533858835865_0.0010197917171177462"},"_hasShrinkwrap":false},"0.1.7":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.7","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"c5bf7274d504a5942911d216fb7c30269d822561","_id":"@atomist/sdm-pack-fingerprints@0.1.7","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-5bG0XRvkjqmaijymX9bt8+PdE7IDDq6G9X6Dnu3nGuD9pj7EMKGL3gf5t56bFKZyg9dXZlt0lalzkNH9CpLw1g==","shasum":"aa1b0f3440af08a507814a39e947ea6e5a9e5854","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.7.tgz","fileCount":42,"unpackedSize":189116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbNatCRA9TVsSAnZWagAAlPsP/isrHVooarSH4QPrGB4B\nrt9YhdjsW9Js10/akPB6dCj5QQcRgwvzxW6z5Sv/7EsO9o3232oiliK1Mws2\nush8onenjIn2QiMr/w08LCc+oHi4pMR5Kn3A5nwNHLNhw+scWXPuVQc91WyO\npduSx9r2MEk6mJgYvOmDZARzm2qxsSG27CXWNWWnn+ZBGreYgCgDRL9IPlL0\nlA28LMYDxzDSMbi4HJOdvQqGX25r3WKgzLlI8q4/RrpvObjkCe028Pr5wTpk\nRkELuksmfrwDdp/YR5zP4Ou7/9ELLBMQHugr+cWH36zzIzHVt3Vyj+OndFtV\nLrtjLbY+cIy7+C2hWCeI2mh0o4a0ljaJR0ao5ihKAfqDEaL6S3Y0FG8rI+Ca\ndxQX9chLZdrQiofv/xGXpr2oyTr+4zmbUq636YPRpEEfaOpNB8TQpLbrGppu\nyILSCKJd4e0ueLeznBaDP7PuV4mfr/LGzku7Aj97c2O8+a16Eib9ZFMknzyt\nfY81dpQ5J8x+TB2PpRdIk5T076ZSwxz2BC9Xw7SWE/KEXOAiBWk2GhtDUhpS\nEn2ER8wnk5t3fHQItxgjlBFK6n2X8lMU6PduOXqJWgUavmbyQwFWOK80hCr5\n3OSjz5NyZ4JteFswtSrCD3HtfNCq6fjpqGntIzhZ7OikcrULCT+xDlF/w/NX\nMGs8\r\n=VfuJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG+5pX3zBAr20iFxeRh4vSHB3E9+bZeaa8W7jzjv0bDFAiEA6MiD6y156waUdJKjLylWDhaChhThV8iEoad+Tl3FtF4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.7_1533859500686_0.9961322359307412"},"_hasShrinkwrap":false},"0.1.9":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.9","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.8"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"a330a3e937af070f87b9bafdd8f005fc3a5eef4c","_id":"@atomist/sdm-pack-fingerprints@0.1.9","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-I/OKKumZcdg3S+KyEKmXyuu1MWcKAxXnInW5HFu1naL07cCp2kp51D6lENHMzYKWwWvjqxLBa5qw+NmlxWHfhA==","shasum":"a4da6020ccb3d26ed9412a68a369a219655b540f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.9.tgz","fileCount":127,"unpackedSize":2137081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbPRzCRA9TVsSAnZWagAAVYsQAJ7svT61+JnfdzPe5l+l\njYeQ2VUvRsVuvTQlh8dn1t53CAaJ6CDjc6s/7S9kG4Jebpp2ei9Oypr2NufO\nHmhyBR5YrQ71IUO0Vp/LXOc9Yrqzg8etrvdygM2GCDswtSZ14ke90DSXWopk\nhKIxiXx92wOgZvyrr8JCMnC7aVlVarniB51+8Yd2v3H+Yg5cwZGI3dLQ4oa/\n8odfLZcckZjQNqbYUxtdYAA1LzxbPZyWBSOjDhUxxtk4ci9DxtkghsLROKqS\n5iPT2OvVocaBwZFSTAjylaxaXftOb7fUMZpQQJFHXiO3sxfHCJRrQ4oQoZ1x\njtHEfM6i5Mp07JRb87zBiA7Qc6Ygi1l7IdmjZ0goE4SXbo/KYxXXfHU/xLPf\nWFASQ/swKnfHFi+PYkb3eVsvnCT5Kq1+MWS1xTCHE/MddnnDXsIaoj3tRNDk\nQm3BsmaNuKx+MF+MkOYVtepsxsJff0/sh1i41NjHOzRJoU7uXle2BnMVknRH\nTnnVZ9neLLSfkgzhFywSiHszgdzTbrP9xslulJvaGwCeZkBmsLyzjwsXTX/Y\nlos6iSC2YFIHtEc7yyjW5qp7IClTF8yPZayBAiUECyGQbCBqDedpZUgBMBGK\nTMMQQQvtD3qgjgN3SX4AxyxFVbHFdPZKLKhCDcgZbYTlfTzAPzepP5utma9Z\nXmjo\r\n=gaXh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChPtx0cg+AoSdQnvTDQ2niyU5nYgHrK5IcZoJf4ve2sAIgZEcFaXtche+nCkd6aJfYFl/dP9VNRjVuXOHK7Iazm9M="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.9_1533867123511_0.6721395165586797"},"_hasShrinkwrap":false},"0.1.10":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.10","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.9"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"cd9677d6db5e762f632fca3587b6be95b9d6b726","_id":"@atomist/sdm-pack-fingerprints@0.1.10","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-cDEJH5NYyycJz8E7Ypv1qpIc5M0q/5YCkde/wlAT5Fljx+2mNU1O7hRlixUiK4p2cFAzG1kOE6e3/7c4FPZk4w==","shasum":"cc9efd9c812751b4f03cdff3b4300f2cd914faf3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.10.tgz","fileCount":127,"unpackedSize":2137082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbhShCRA9TVsSAnZWagAAz4kQAKD4Yqf/E91oDLonEzPd\nk2ZzjyM+IYPxpEwNzFADQOJJ7G2rAUzNgu7AFSL0eKds8AcZDjfMwM7CXWCH\nIcuSIASCD4Uo2iJry3SdpnT8Ce1gBK3qKU4hJQ6t7YFZscsw0xWO68zsCRmT\nByS5+KSbbfNM5qiotQX3HGIK6krwVpnd++9k1x+ZESMcGqSyXriEizicZbXU\nv6QDHHh85cSGvTmetL+FD55N5KjiJQRUOnC0JT/T/49qSfjioiAj9Ara/XyJ\ners2qQ/8VSklyVch7nhimnIKWVta/R+taTmahBzje4UEXSx0LpV9H5/vDyxl\nVzpPHEUvWbWWoyTnBZqHL3F+axa/hNcEtPqZC6ThuLFKKaZN/hWzdDZGZpbg\nRnPMtjuIFzyV2l7BeZuuT2t8qsNIODRmeK0heLEu+L/X9rvrId3klI8vuYjc\nJQ1MQ97znyUsaSCbswuqqjlpV95+YySzn3EOs3uFrMiYzbTgd4SyOQvW9r45\nj/sD/oQfzWRwNLnvC3zAI5Wvp8LKbLakhPlmjendlFrgimXEbK27xLM97neF\nGBslcwTSzf1HkOAqcG6TqiXITPOroebo3lw3CRlo2Fh8Nm8AnTSDAbVT/l4k\n05iN8FT2y4qUujvvsv2NNklk+aemmFIW5HvO/R5ugIG0/9y8LQWCjp5eqR+6\n2/LC\r\n=IRIy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3rA+fctngpUHxVq7RIYGCUSaT7STt/F8KNiQyt08DdwIhAIKcKJ+ZEgzK5eM3IhuvgVAD3/hiEXuNgYuqGxvhcsCK"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.10_1533940896917_0.9102292762225586"},"_hasShrinkwrap":false},"0.1.11":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.11","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.9"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"cc3b1b824a00b8bed3e019755082ab00b8fe5c40","_id":"@atomist/sdm-pack-fingerprints@0.1.11","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-qHPIbjIzpIKqQqsfOhhdrxw0BN8KiBJ1UUR8fDq8D7RouPZGaPFmhQmbwpvioIjAraw80iuo/1JZIDJq34EcMA==","shasum":"44de69decfb8a6df394e6368e65b9da2c5037e8f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.11.tgz","fileCount":127,"unpackedSize":2137082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbhbuCRA9TVsSAnZWagAAnTwP/jdkYfd87VRMBl49wanm\n0toEdPXTYVwMTL+7UXNpH2lqRXXSKwKZ0uPopuIqg2bBCqG4uHBd2ZrWauNh\nP8Fjrqz8lSgKwKcncIQACh1wNmVF0SNxkOPfGo0CojjamrykldVMKyCeULGH\nw0ejB4YBZCksdNZBBshAeE2AyDqUE71/208z72J8mchPMNyb39P3S/wjMH+k\nwUOK7BnHNHNl39UAhdAJraN5ZgjbSs4IHixkpa9PumjrrBvwhWUjx3IblbWn\nd2ozPOAdEczl+mzDI4fzodvs5Kzu7XSM8fu9VE8eom19dnN+PqD7d+20BK+X\n12SnwV69k2A8G9OXMHXTJENMtbST2L/2rHSdkA4uag4FMto/uqv8j33QcE//\nJH0J/IM84zKzVecC+6QFoD6tzo9ULoJtxUia96rMVU4loZyPQyFiVpIdKDl0\npJspPMsOIGhSlUOmvzeHH7hx/QEh6+YDEnf6AgSAOoWLmNE7MAxTtmnFLNB3\nxqWHhBv9uFFP8uny/S/j4Wnk+dF1UnLBhcCyv7+g6/paFf9TUoLHLa7YSxiG\nIHcQSgGjG4LjKsK6h/UxLCPflxytF2BZzjpt8aiKq+aQor2XxOzpBWAPd+so\nJ+OPEX0EzINnA94F+LGAHXOxPi5WORVwrxoI1crDxkMKWfNfwbHi7hsw4LCM\ng6FA\r\n=DPRY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4p9wmJQAUny39KmIIHq5YQWDUimfnRNA88B3GinN0dQIgTNvZZrYn2Oa6IIQKJC/vAU5GLNz3z7DZ2XbgjouNOH8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.11_1533941485508_0.5251761879315384"},"_hasShrinkwrap":false},"0.1.11-20180810225147":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.11-20180810225147","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.9"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"c8530b3b1a4a23a4a6d5cb9da4d425346e77cff6","readme":"## Using this Extension pack\n\n1.  add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2.  enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.11-20180810225147","_npmVersion":"6.3.0","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-lH3yqOnrvqAMvies8C/kosXhs/w4iWpL5BlrtWgUYqOU7CWMucq+DUyO/d08dJRyolCizuuVCB2cZRm6PpWpIA==","shasum":"b8c6b176be5dcf85a8cefd66ada76eb86b171d81","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.11-20180810225147.tgz","fileCount":46,"unpackedSize":189899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbhd8CRA9TVsSAnZWagAABhEQAIjBAsUB6pSL6Jvu3GT6\n5QiwCtbBzeY2Olr1E3sh8V7VfK/Do747gAl/v6w1HGODqjeFoA9gS5kVuRXN\n5zrkRNKwfDSEt6ytpA0rLcCTRJHvdsMKxK1l1Wjs9Gicnjtjr2ljtzn6C/ub\nGSqa9CoeFAPAjzPBXaBGbRYGhFE8zkfePKxgSf5uwwGMeV0dP0/Ss1kZaMev\nve6Wz885EJ5TEHyAvO0DGF2AvfxAk17iDJa0zDccgOnqymA84uS9LwXVVzIb\nlUR15OkWRtFIM0y6eqBP4muQvxhxAC5DcvDMePsko++x1xyW77wvvSDtobwk\nIpRp0uYk/ZwTM1F578RN6Ovb6Tp9ct3T43G1lAgZ+/wwYdMPchcy1Uk31HVg\nOPHD/6jt3UDT8SzLnwTzgMhgJ+FuZzcr4khGB4Du/kssvXyBgS3b7VKkYxvd\nH062dNnh97Lt9a9AISPwH/7dQjxAAUvjOBXXinjm8yAvW7roNuybBc2Cd84I\nmSnguJ9eo+nd5o7kNTKszIRSRpZ+//iv7khn60G26MXCQb+cfJsavVN8Ywpg\nuoyPXo0/WkdIUYM3GXR40YTPlbUIfDIfieqtIfauaydlENCNhJMlT4rsTtwn\nmw8vgT0xZznJVJDTKQIGXlvq9dhyjtqmnulMbX82Q5069cNUfjgn29dS4Wc2\nc9mp\r\n=fm/A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDN4qByJht0Qd4YUHoOrS0YZSwZM1hmviBvi8sr7oZf5AiACvDK1BtETB8c0gcXmLrOsh/fLB3tKhflJo70A5uv5sA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.11-20180810225147_1533941627875_0.4901313430255836"},"_hasShrinkwrap":false},"0.1.12":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.12","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.3.10"},"peerDependencies":{"@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"a4dc83f64b707c63f019c4fa15a0af8709737fe4","_id":"@atomist/sdm-pack-fingerprints@0.1.12","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-I5PhX9riWCaDgXJybpOPB+4J7Z0Kt0VllfY+iv3aaT3xDYRT0wnDNA6XaUUNiNnOtNB+5JIK+U3Zg5I2ZF4zPg==","shasum":"41d60e99098be6b454ec7adb557e19deb7c2ff8f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.12.tgz","fileCount":127,"unpackedSize":2137083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbmvcCRA9TVsSAnZWagAAXQ4P/iEn5t76YDaNwFzarnCJ\nIdCyhu4+8c1INSqoajPF93Id6zL0ukqQy6pDPe+N/XlxVg5TmgdiD4JLurxh\nc08z7Zon9ZBlFOKnqsjySTehf3m4JGfjj3Jvd0RfYE6/+O+WsBFsN3vA4dFg\n3YcI5Kk0A8Dh9RNaYr21qJnWynb9CisJruW2fwcah+sN5gl5bm5U2yla7bps\nMyzvbYgY8sOGCNlluADejhf9W0dO27HNQwLieiN36pIiUAYFkSLO45EMmmex\ne4wbfeCyVEh3p2n0H7tS0BEbk09yLbFRKfVCPNONgpeG9lh0OZUpHCLiQKdS\nkp5aDE7RHWM65rPfFaCSljKW8oIMSxX6/maqPEJUcnu5D5PRlOsrHdWJjbex\nxs7aa6aJiQqwHZbeu2jBdo2x7bDDheBuBkUi5L/BeSL374U7KFkuKKwtrCmM\n//ZJHyhvDjo0DaXaAPlZq4IJuI5kq8qefgH62Y6Kdv/XsjNf/Lw17/AlJ33B\n4W/0e9w7mHRrfxQ9r68Fxqr5qf+HdYzb7KXohMhjkZa53w5f921VJAVzFIyh\nzEfbfBkHgGUxyi2WJLmWO2UMSqWbxFAcuoN/OeELZaL8S6ECLl66OQmvNzwk\nC/93E1sI+xrp7KSbE388giMCdwjFWgHQzgZPJMErjSHp6muE6NcSLqBDWMmV\n0Kg0\r\n=dqYD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFN7V97X4KMmAOKF8RBsx57TzfwZ6IvJDus1xlWCKzBxAiACWPXdUXFMVi9DCQNZBhP0cVrH/IOoEHC1VtOrE6Z+Gg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.12_1533963227625_0.988281430163535"},"_hasShrinkwrap":false},"0.1.13":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.13","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"^0.3.10","@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/clj-editors":"^0.3.10","@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"7f3d0eada8dd4bede271878f1b7f94c299a97951","_id":"@atomist/sdm-pack-fingerprints@0.1.13","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-MHUkuMTPBEdplGaEcbXrFRDk95YLj2waVaeuAxgNnEBWRFWssanTLAXNNrGBgeU2cCd1xfJn/fiVjeNATSS5WA==","shasum":"ea274d4dead1ee281a96c45e91b24087a6f4d20a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.13.tgz","fileCount":115,"unpackedSize":2132703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbp5BCRA9TVsSAnZWagAAkhYP+wdzRViug1KMXqFQGXHz\nD9geQAGIqL0zr/sQc5mAn9yOk4pjLUtkccWWkFzmVaCN6P0UzxKlkJ/Kviza\nezyE0ASWRKeyyEUxb5+tgdokrIbzCL62e7YLYqk2ufNoh9TmutL5vQPuiVf5\nVcBxhJnsNotrxkNaOk1xA0kQrQr724O0sWSzyCsFAsGqIrGLZZ6EcDMxSvj2\n9hAa/tTSxFSZQJd2SbuBmNNkhUMYjcUl4rP/fEOrbfZZUeP2oIsLDVr1xp23\nGltJUBw2Mq2Oi7QAg+OIbXU8snvbMNgIcMBS7YXsUQt1m2GiZdF2egdTHTdR\nx6Buq01sk9qlhYYUs1acobGic7pTiWBEJ1AzfT/xnVpaX8KUR4/aTRjaM2H4\n1p49v8F2gfoBJnsNySZJW2Wu1NCq29RNNJjfii6yqU2qeobcRFMoPpHG2QUK\niamscWFMWtoZd5saAXAMerNu/j49oMxPtpCsqfbejvOr3iVbYHGcfp7yoAuN\nzEegtvLVf5DdfFE/bJyllzYk8XMzzwGAEmCCqd7vXWXPD++1FyLeBggcvNm+\niHFPP0O1PU0hqkzzZ0eq24Ds4vyOrtJ4v8rKpZ8GcpLSeq/96sIJ0Ikj8f2U\niYQVt03R5C7nO82bjVgCshQ0R3dgIKAbGbINZccbeb2oqwFZWxKODwYi50+X\nnpZK\r\n=4afB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiSt1tL9q9Rr1uxKh7s8r4fTcK3LQTSll0D7BpTBmwYQIhAI+BvbmQ9/nq5CJ+frl2JSHmx0h/r0FtokvSZpZq085L"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.13_1533976129343_0.4729960726570239"},"_hasShrinkwrap":false},"0.1.14":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.14","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"^0.4.0","@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/clj-editors":"^0.3.10","@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"0418c2c28869c2c9df46a0f494f7770192096a2d","_id":"@atomist/sdm-pack-fingerprints@0.1.14","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-JShCt2pu4KCz4JyfhWJEfQk4o54sz1O+7knlNCkD5va/PAQUCEmblryphZlSGjZ1fu4MGJV2EQa/Lw13Le9BiA==","shasum":"a822a2e3ef3e658f7e211d5235518ab74b4344a6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.14.tgz","fileCount":115,"unpackedSize":2117192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcitXCRA9TVsSAnZWagAAGwgP/2j0EoitGO5MaJEsN0q0\n2aVexPxGWACpZm5GJ/In7LAq/By3I60mjdJF7MvrbOyp7bAAdJ7Q4FUsswlc\nHL+j2L8tiMBuGNRay4TglHvDHdS0M3PmRv+d32j96qBnPXQYW2DR0hvjrHTh\nvoIpBZSEhHKOqHCWBciq2l2u7y5yp0VNdaMIhO7Ikm3I2nw4uSCBlxh0+Ar7\nLba5R5SJwBHzVD+5OWTJ7f4niN2R2ekjA7IZGz7N1zC+WOxScdOAt3EMxHK2\nZfXvyNZMr03uT0XO54pDWd+v5iH5QhjpezV1pu/ZjGXT7Z21lUENmbMLtV0q\n6MtsYdLFZt+Kaafdsac7BGT4Eo+WBS2swLVHolttJkT4MT8BrFInuSRyU0JQ\nL3B+9s3aCcZj4jkLa7MCkzqid8yDWx1ZsI8oSSGx0d8V+yLaXcDKdyfIzITQ\nCDSeW/+hQtej2HFFNOWMqAlfGl5AOTH2Xgu56i3CoqaGxO6r20jdAN/OgAA1\nyMzXpHEMhHdw0nbHuk9j2Ny7HSh1kN8S3VZl3ydnGvb1zqDnNdNEmdcdQUcB\nF2JDaOebqV/2qEj4fLDzLZZHmQeeleo0l9hciiwJIiBqmnNZWiR/BHXopoPz\ngn+S8BHhnrEqpcnGK6bAthaoEALs3/GEV0WGFX+Fsw8jGCAmjyvQBSjNNWXQ\nvm0U\r\n=dBlC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCq4RYBQHrnf7Krav3XLwjyGdro9V/1SKG/XirU1DTgyQIhAJGwz7FezqQ8AXv8vzR6K23FeqXG7rObv5BIsHhB8aLd"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.14_1534208855176_0.531384047911367"},"_hasShrinkwrap":false},"0.1.15":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.15","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"^0.4.0","@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/clj-editors":"^0.3.10","@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"f65e86ee52245d20c31b46061746e2995853883f","_id":"@atomist/sdm-pack-fingerprints@0.1.15","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-YT2fB1bhCGL10ffwaiWSAKy1W70CNOsH2pbANxuEy0yzJNdfUMIMpqhIY9MuxS1YXZzPxDCPEboybWPNi2x6rw==","shasum":"2c73cf522f132159c39bdb65161f5482f3310148","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.15.tgz","fileCount":115,"unpackedSize":2117192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbci2PCRA9TVsSAnZWagAAw8IP/3a/jqzgugstIHqhWHYu\n7zNXIa01QqeDyarhlSEsYMSUSuaOFmDowRKEsAJNLQwWtdNjuX7Ipc2lRhkr\n9kH3NLz0qseXQ/PSd6AB2Mjwt+bmESw6K48m5eUmAU2Z39zx/c6URX1SkMPG\n6FVEAScE2jGcugiT+LSzovmVACrrZjE0sBXF+9LORP18KFzb+T2S8/7iqk8m\nRotiYBVQFM7r4vk3rJUUSDEWiWiLwkAdk/vEyy+YZRRe3Txc0v6X8DY5NPrE\ndQssIopvrHuPDn0ltteAKvpguBq7N1PAk87PkiyOQtyxpl9Uh5/sVqUFA6hC\nnRnOwvUGTXKsT+jhmEy34Qs6c+ghEcv5PN6d2o2Vz2354i92SD4zH7D5k9+Y\nB6DYwWMFeV8xWIpI5BHhaLN1t5ied13nZ82+95yAfw2L2dmUn7ShDJkgIL4H\nPO7JyVhitsJgSt7op/LEpgwdWe/jGRroci27nn3D7bSeD8ta/NO002eebb53\nkiA6C5gwupiNGYIZbIk3hAMGQ89dtwxim11wiQsMvobHerDRuouKpt5XSvu5\n1TfXO3tpw6Z9wv71hJcgoWy9WvdItoCf/AjONJSQdMjxGpym2Bz+THZe9D1A\nZYVrUQht9GvnOz3SMiApqhiejpQBSPfmT+ByhtJTEBNmqda2hCPNFGtXbmE/\nQljY\r\n=lrTy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDspc98Kr47GdHgO6x7/rS7/PPQZRpM6ZP3+PfRtCejgAiAJscJdNy0tIc1H7Ip9HdLzXXjBxTI9vBL79ko4XC+GHw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.15_1534209422689_0.09386021697155855"},"_hasShrinkwrap":false},"0.1.16":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.16","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist, Inc."},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"^0.4.0","@atomist/automation-client":"^0.18.0","@atomist/sdm":"^0.3.2","@atomist/sdm-core":"^0.3.2","@atomist/slack-messages":"^0.12.1","lodash":"^4.17.10"},"devDependencies":{"@atomist/clj-editors":"^0.4.0","@atomist/automation-client":"0.18.0-20180726075348","@atomist/cli":"^0.5.2","@atomist/sdm":"0.3.2-20180727002548","@atomist/sdm-core":"0.3.2-20180725161559","@atomist/slack-messages":"^0.12.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","gql:gen":"atomist gql-gen --no-install \"lib/graphql/**/*.graphql\"","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","fmt":"tsfmt --replace","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d70ec0659e53a420cee1a67b37c0e8597a14224a","_id":"@atomist/sdm-pack-fingerprints@0.1.16","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-7FgmbSHKiGUYI7V7s2O3yjzgQ6NVi26AKPTcJMA68x9XU1i2Q9T+3KTPnAod0UYUQIi3xEnOETOdLCOydhuF3g==","shasum":"df22fd1d76996762f7083aaf5e33f2427c3d2de9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.16.tgz","fileCount":34,"unpackedSize":169956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcjNZCRA9TVsSAnZWagAADSEQAKNuJ2yvuhU3qdKyyyFU\nNSh8TFI6RUsW+skWMvNKMG9UBZxGZedFOvIgv/mCdm02NYGNPPPNuNjwsZKi\nv24X2MRrR7NeE92fKJJxWkJCmhxwDkLeQjELxo+zcJfb78uRnmijiS/sqRx7\nAL4rp84PxsUHYEVJKuRCRIdL6UPZKiPvd36HPAg64r7Uqs2BJyd2Q72vg1Ju\nfzjo1THUWsjF0Ghc69Hxl6I/QRmWmL2dhekTQt7/ijevL5lWA4IFgPJVvy4I\nhs3Rv559K5MkKsnwiTUSIONXhcNzt8+6loeHZ/6WI2xrXu9fUMSqL7zr+b2X\nfk/yg0qnrvyP1mc2x6VWh68uOmr/h1CYIYoX6vEPYf67do9ksbjIOjNK2Yti\n4NRgxICeOtXEmvmdD1p5Lpsemh9s1VTh8/Z4HcsIBPcv4kUE35AWHDGQjYUD\nPS/bXSdG4+ZLvoJ2CKn4ya2E6ztTRvssmxFDBMNmiEBxIqAAAV6I23Jg/YXZ\nZaZ88ByWU3r5p4qOlqqrG7g3fT6sGae7LVUXxUf6J8i44hxo4DyWKyoPgLHt\n0Z8E+X8BpQzA3qveq8DplcMUgdewdppXv5LC/Sc29cVq7PAObnU5CS1mJL9+\n5LiEoDLhP8jcQK5AV23eC/K86MO7LRTos/EjzvcrLlqW5dL5sEHrq/wHIzgo\nJ6tw\r\n=QEbL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/LiEYdLnPr1v5exylTqGEr+kHf118KCymy14qYv9hHAiAHfbS4G3WDuKiPyTUi8CyBMeOelapi4BFuIc/pHi40Zw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.16_1534210904463_0.11505541530433572"},"_hasShrinkwrap":false},"0.1.16-M.3.20180905053450":{"name":"@atomist/sdm-pack-fingerprints","version":"0.1.16-M.3.20180905053450","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/slack-messages":"*","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/cli":"^1.0.0-M.3","@atomist/clj-editors":"^0.4.0","@atomist/sdm":"^1.0.0-M.3","@atomist/sdm-core":"^1.0.0-M.3","@atomist/slack-messages":"^1.0.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"7b4afedacd865a415dd181dc211a784bb2b31a14","readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.1.16-M.3.20180905053450","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-y5+3VFkGfHCnCE2cz/T+yM8Goy779FH/TZ2jE26F6xXMB6zTYS5ZX66xLRLNg0LysQ3HZozT+cgKYQJx6Zwm+g==","shasum":"ba5a9b946877a79216cd79c7ed9d51b6bd492b27","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.1.16-M.3.20180905053450.tgz","fileCount":34,"unpackedSize":704335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj2tpCRA9TVsSAnZWagAATlwP/1DncVI5pM8Jr16jrQtH\nVDKtN9GwXfKNPYCwr4giLNlaiUbXm1RsSkinWOFTYQ1+rwkAeuU41l9nICxf\nRf0WO5xJ51bULT502aVwMhd5Zis7M9TNLJbB3bj3FfWLplPDnQSn3E0A7eEq\nHvlus+JofWQT1k8bNmwduOdEEaYEbC4FHz784GnG7BbDQl5sjPl7CrV4OGqw\nCijFvlzIl8MKYlRx6nIIi4gGNLHuuhH/eMkiH6qpk1TfjLYJK5hMOg8JjO3j\nWM1az+CytphB3WqbmsUaeFmjhH3jN0Cfk+CfSqLlZZVwJYi2icXjTBvvvrAe\nbf0/Mt414V/OJVjywZkR5dfRDQu9WRAgHxuv6vPA3px4CO82bdIyat4psr4O\nORoWiI9wfBEXuSGIFNxv8yqOBnha6SPfELcFlgCDm2lDL1MDQH4f5kGfEtip\n50ghfl9nBbncD1q+X/jgLBvBKbtbrnBK3/ExqeosfPH4AdNCU2mxyWrUpNM/\nbqICo1aFc4AJdB9lepiSI9i2//jHQ/FinRRRgiU87QChCpC0pjWmKI5vcrVR\nLwN1C8mxNdSmuRYRaolD7wUakwVf5kJtO5tVbsl+3953Cjn5ZC/x+G4YMeKb\nvTuW+sxDgX515joUTCg3DDt1KMq/4ARP2VFCmkFV/YH7f8lwQP/Aux/+akcG\nogH+\r\n=qUJL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeKtIBSAxw2ojt2X8ULqE1pG3AVx5JP0vh1dfHL4mrVAIhAPPcIw1rDHgwTJm0Xj5KTRIol/EHyMco0cx1MyQSWkbr"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.1.16-M.3.20180905053450_1536125800833_0.2957149866414879"},"_hasShrinkwrap":false},"0.2.0":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/slack-messages":"*","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/cli":"^1.0.0-M.3","@atomist/clj-editors":"^0.4.0","@atomist/sdm":"^1.0.0-M.3","@atomist/sdm-core":"^1.0.0-M.3","@atomist/slack-messages":"^1.0.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"9a6a427cf04a5460b2331fa57959cfabf0b942f3","_id":"@atomist/sdm-pack-fingerprints@0.2.0","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-zoeCennSdWBg0T3VWzqHiYzv6twt5f8uqJXoyGpvgcCdWWsFkkmJGfvzJ1s9HsfgADaJVuzYuY+gZcI013EgXg==","shasum":"d18fc3e77cda5654f8a73307f526e1f2537e9cf3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0.tgz","fileCount":157,"unpackedSize":8577831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkGP8CRA9TVsSAnZWagAAq4EP/iZuMvQm/Z0uXmsVg9Zz\njuADWN1i4Z7s+6C2yg/OTKBOisZzPlm9eDORLTv+P3JFSjgGwcBzGxolk/5H\nVoK0vVPVhSrYbBpz03KkCNkrMC7S8s6HZ1xu9pnCy8SAOcnAjAyec9oWi8ib\nJsjCF6iaC44CsPa3wxTbfvTvMZybIwpbsrORv/bk+gYSPIHDm08gFZ3DHSQx\nss/SUsDbB6OK1R14jkrw2s12A7tZvafp6a4AJC05QVdijFqDOtGCq+sajeBc\nUorj8VHaYRvnkT3b4tK8qnxHjhgxCpPJeg++4DzQRkkaEXJ4AH5Nz2ycsD8S\n1DKmNLXpcXLUMlnisJdVv27QnCXU8yGnV1CktQqTfDhHkIgJkYjc16X9rdgZ\n69NayxRTxkS22KytgrLHeDWgdpXZUOEE5DlRbEM07zHMzroNyFHb3JEAcXsp\nO49deNmnRBdOE4WbDX8Ahbs9eDRn8mOkTfx0ZQKnvZWthdAcptLL2DKdeJPM\n0O+9lcUnWG3/HIjQWNKaaIH7+1V0Vjm8WFrXd1exw3lq3g51uBCSEqVmd9gG\n6GCIm+S6NavPxWVCqR0zeX6NER3tQe8LYUMoQ11pWeY9udsYY/gLNQsuUO/O\nieDA2LomvkI49gLdiFVelvYvsYlFucA1FO0E4GTako3/R5FtsPArqF9v5nWc\n2yB+\r\n=KDSl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDseAfiI/6V0VkhsKPkRQXIV0JdzF6ADuLOr4YwywpmkAIhAPJgy46f8HMGeN2nkPebWvh9yrfMw1/pBlQL40LaTu4U"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0_1536189435789_0.3097245854714754"},"_hasShrinkwrap":false},"0.2.0-master.20180905233311":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180905233311","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/slack-messages":"*","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/cli":"^1.0.0-M.3","@atomist/clj-editors":"^0.4.0","@atomist/sdm":"^1.0.0-M.3","@atomist/sdm-core":"^1.0.0-M.3","@atomist/slack-messages":"^1.0.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"46ca2490d5fd29f889a2a15e31e50be51e3bb534","readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180905233311","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-G21lZQq8Grrs5lCMbb7gtNS/aOcTwc/Qzs/54U9HSLnbZHUk+BKSXz+Y4PV+3jxqkcpJ5RxUT5VBhyajOfm0+Q==","shasum":"294b3f779561f346f8f44c12be9f39d0797f34c2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180905233311.tgz","fileCount":34,"unpackedSize":693644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkGg0CRA9TVsSAnZWagAAD+UP/Aij7jI9fHlwAFaXnwGB\nbbxHlqe+2dJuF9ylZdRBYs5U0VPvBXJgRQDlQRYpAKZDqslcV1AWowX/Aa73\ncg2RfAi2bv0FZBXQVzcnUvg7kzs6iEKR8/raUaoOWp/cRyORlWDEfyZKFk0p\n6gPYLAl40RE4gYekf70cUOGfzMJ9j8P5wb6HvN2xBOJqbsdqIgt6ct2sF0xu\nhULOKtJuqfmeedevrZ2aaf4fDcczgrkkh8QBiNeQptGt5lcNK3/7fvqAv/sn\n+pkLiz29xcWJYGK3kZdB+QEVZvuKczLYJruzsKTzbNkzrWUgOgqw1TRl+Sd4\nXbQ36tr3EbMV26z/qY7/9pTE5T8YpAMlPeReLUWCICM6Uk/YamQLbxnegaxy\nlZSTooMl9+ILCsgZhB1yqufCN/voVTLZgTgy+ZG7vlBBtir//6LpTa0gleGv\n0HkPgXR7pZXRtj7GVzmiNq+ALeBl3G278TxU9D2U9IT3PZpQl9Qf5+YchiTm\nsfYub7KtdiCRjbJfGHnM1Yozs14wjLsgdbvwpLxbQ6+gme+3X0QEjaVPmtUb\nbNONVczi1g3Ez6lLJsl8QtQz98qCPMe3DQOCKNSztka4pOZsbMifNLUlNpXV\nLMhwGtmyryQkau45d8fQcDuhMlEAGpFMVn4srwDXjTOBPRvGym9jUfcqthS4\ngHpo\r\n=D77A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICWErxAoRhU6iojScukXx28qeaG6ur8hTkBSbkxKX7mVAiB7MbRUhNAcaJgNFFQK/B9Iz4aNV8QFL/Qk/KLH4EDNog=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180905233311_1536190516172_0.07598903028708359"},"_hasShrinkwrap":false},"0.2.0-master.20180910014348":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180910014348","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/slack-messages":"*","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/cli":"^1.0.0-M.3","@atomist/clj-editors":"^0.4.1","@atomist/sdm":"^1.0.0-master.20180909210749","@atomist/sdm-core":"^1.0.0-fingerprints.20180908222943","@atomist/slack-messages":"^1.0.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"b21fc82b01d2c046cbcd60365e7530ce3ae64491","readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180910014348","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-wKTEHPkzlAbomF5OL0PP59OJo5qpcvcHVNAoGK19UeaFxmeP6cyInqd5N6SRWmrkqisqQURvXMnUHdLBOROEEg==","shasum":"5fced3a5c23ff74f85768f35c436736cf72d5cd0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180910014348.tgz","fileCount":34,"unpackedSize":700201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblczlCRA9TVsSAnZWagAACNoP/i6ttliC4kyjzSI5A70G\nPqV/RWPqrUuY5FWXoYzGhqydEquVHUJxHlzvZrbIxg7ArqegsFd5srjIHJhu\ntf8OHz9jU6/JovI1agFSUDcKYJKIr4piRbxYwWwUs5DiM0yozMGcKn29lokf\n/O8SRJM7vbKcPPl9jUl6dezPRPOEtyRUqHmvQKQBoXHkzRU7VZr3FhEfHDMw\nG1e+Scqk+VBIY+e54zVNOg4M0Y+G9ypGlMFitdfFjnrMGcWLkCmXZxRi3aTZ\nZd2lXUesLth2Msr8+gc/VJaCNyJYP35+zMVFRLaZt0vdLvErXAz3A8x8Jl0T\nq6t3doUpXbGDQcUQnx4uH+Zyt5kpfWgPDrsxQ6MCsCgrdWh3Ybd/gSDW2SNy\nh1BKSOzbPImX67WAN2m+VotSYpOKk5WVFc4LH2mbiI3cy8eTAR2dUEGHs8q8\ntTB4uITmgRT2WUSSqwNWp1yMZud/S8vFd50FrdwsZoELRMvkxpfzJKXtHHmf\nW38MwVAFu18AITq1eokNcgdZsRQMkQRmSGrh9D5rKI9wLzpZS5dez6bJJcex\nM82rjZ/FiiWpooUSe05rUNNlCyXQphmfwx93mHgEB10dgcVVhU4ifvRdzjTm\ncJX+7dmgmB8vjbTnT6sF/gT1Tkb0CZ8FanTQmZnYGSccsakJR15vFD5HdEXh\n/BNx\r\n=6ZPI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDGpYzdyEG97d5BFUyd9r7kNv+kSzPWXqrI5etlcI4WSAiEAk4DmB/QUc99qTulCLNFVl1dscZISiHOO33KyDe+PRwc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180910014348_1536543972685_0.6404571663072784"},"_hasShrinkwrap":false},"0.2.0-master.20180912020436":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912020436","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/slack-messages":"*","lodash":"^4.17.10"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/cli":"^1.0.0-M.3","@atomist/clj-editors":"^0.4.4","@atomist/sdm":"^1.0.0-master.20180909210749","@atomist/sdm-core":"^1.0.0-fingerprints.20180908222943","@atomist/slack-messages":"^1.0.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","lodash":"^4.17.10","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2","typescript-formatter":"7.2.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7814e8c07ba721dcea747ece19734a26c84349e4","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912020436","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ThTllLBFWiYw6Zg7oxPpbxZ43V4yRfdbbrvf+hp07n3fV4OgdDIG3/xSoEyVQVUXlIJ33gTw313bR51j61ErOA==","shasum":"4c1c1ec908b720120c953e2a8f5446422684ddb6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912020436.tgz","fileCount":34,"unpackedSize":700243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmHTBCRA9TVsSAnZWagAA3pMP/1v97LQAolIljaFFIonH\nmqGc+kjL5Yd7drvqqmBR4pWAxP9S6L1QlX0IJH0lh2+DxJcH4rI/J5qZPnNY\nyBxXx/Y9xkD1pfayJtulm0oW06rKkU8l6jY6yeUG1QUddbxamwIsUJhfj1KM\nx9A0PHxpIcN13UbnoDfuAzwoR8qC96CzrvTHmZjkk0u/yjWynr4pPxeliBvH\nlW41lluhydwbBG7jTpoMVUOAauOQwvTkbCFLa+FDUP0IfrwpsxiNmtSixabD\nN77WsmjBBg3H26bmkoRhMQGuRELsEwLOoEGkklsg37qNmbTtOfdjcmP1cFXG\nH6sxadUOBV0I7m2SIA7nnlaIXDopONpoSH38KcRMVstACb0tz1tXKWHXqhO/\n89qXVlaUDmGhP9GTCoPSMnbveW6qGOTlsa/qzq5brbG008/fl3aBMY3tPjfQ\nVDTcw5glgXBKBo6nf/LdPFop0qsLHLbmARji+DeKj0EyKXP20IM0UUWMhDhT\n1ygB9gVdDis2cLUEgZ12CObOEeh+5bM7IF5BOIW7Xb5AA7xqVI8UWk0ONGoK\nQcWlj2enzKbe+Xq6oeIXlzXPlOndsbPBgs0njhNNQ+gGMAu6o3v+RxqzMZzm\nR3F2KpU+CAPwd7lDTZgp+jxNRoxLba/GnYuZRz8p9AOFMJB3zS3ElI/iD5/a\nHZ5n\r\n=3Iwf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrCwQaSuLPP7ogoXmkWoMzJd0sePSH9QQhwPax/9ZqsAiB7A3YxMXqlpsYJmjQexXMJwrxGp7u9WnZlqS2EL0pk6A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912020436_1536718016972_0.6433127409152202"},"_hasShrinkwrap":false},"0.2.0-messages.20180912074056":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-messages.20180912074056","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.4","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"ffa723f808d5801f343e686ec14ba2abb5799955","_id":"@atomist/sdm-pack-fingerprints@0.2.0-messages.20180912074056","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-6o0ammiPmf2lvieMTF49JzWq0RsgxE5fSoqWLF6JMA3j1Q4w1Rqr8q037E/XJE2OnHJJd5wlxrQQbgdL5lvS5w==","shasum":"f513f9d3f98805d036d5102995389c0b1845086e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-messages.20180912074056.tgz","fileCount":39,"unpackedSize":721424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmMN0CRA9TVsSAnZWagAAUL0P/27mSrsAP3nep9P+Aqnk\nc2ZlXpNhMzftjPvh1ZgbDwUz8cd5BhsFGv/pmm9E63hHGi70D9kmkbPJHK/5\nswkEImdz+KPGTY9LkAYX6EFWZDfcdJRr10Dc+sK4jG0VgBcUOixL7h0W6VXH\nWE/xa/4IrbJUShPOcff+XOPdL6UtCVDtLY73DZiVYbuYK/VrWjdmdyJdgwTi\njsB1R1DN3kbWnU3KmXK/zpmfAvc6rZp2URO14Lo25gVFqGp4+HLwYNfxShM+\nBHcOHiZ5bq+PoTCjYkGi/M1jWJNMeUHSNlHOfQBjIzsdBnxoXK98eUKltwuG\nMVXif2FnRGPwstKaCaYZB4MJLZ7dt2AjRwTYnIA4V1tWX93i4E8+P5g1TU0o\nvc9DJrSgkQOBxHQuInOBIsTKOcbPFGhHYRf5gZUJLlyJAMSilXG6MfeTMaae\no6Esu5VVowI9nmXJsN0nulI2M0Bm0O17dkSCucwaZQArWrw6ia8Tokg07JOK\nZ4O95i3/ZmVPKWQ3BDSiXuF+r5c5jYI/GzPnfqnHGVMtmEa606debzICieGF\n2TmfdJ0quy8inZbNCbIm89zLL9xSB5JRsTR8l8DPi5PIIrvfbsnUoD0lvksO\njX+gdzYzrcK5vI2EH6nO8Yq0q4lFfw7yecOfoWZZlODh/uL00CgN1qesw4+D\nsyCL\r\n=wk/R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdStcw876rX6Z60EQqSXgsq/+ALLlbj+WePAgwyCm7xwIhAOykzeyzJ0kqZDS8vGosSzn7Dfk+U0vON61ERTubM408"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-messages.20180912074056_1536738163900_0.9632080281370612"},"_hasShrinkwrap":false},"0.2.0-messages.20180912142203":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-messages.20180912142203","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.4","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"70fa87e6eee8faf019fa20040d2451aa600e66cf","_id":"@atomist/sdm-pack-fingerprints@0.2.0-messages.20180912142203","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ThuPrzzF+0Oa7yI4+xClmhUh0r/Uh4qLDODNhUK7raQZHA7Pd4tmbNpPMYc1t/tE0hu0s3q8IUflxpAFeX4mLQ==","shasum":"98ee270bcbbd2d09995965e67304f9bb88fda5f5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-messages.20180912142203.tgz","fileCount":39,"unpackedSize":721424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmSGQCRA9TVsSAnZWagAAzxAP/3lKpBIVuDNTjs4bx9Ie\ntJoywocTIB03rkarHnt1WItvZY6uBgfJ5CGLXLNzn0ITaCInwVavA4Cdptz7\nIGqk7puMbUsGSAehaLyunCJkvgJa3xc1FN2FZ+G9800RiVQTk7FVlw6bTckg\nLUDbUbzGp4MfHyUFixdlyhTKj6wGr5DRQQUuUFxdqru+e6iFPezGSPdB99e6\netfdDU2WianlAlle90mtOLpQkeOuxxBLOBhYZ+LjEJ4JCKVlSo725/AoJA6q\n726EgamODcl6l/IYLwGjOXDJW+n4H9NyPHx6pB2Dv9nJbtVHqoRF/h6I1mR+\nJKlmvNFl8G4HK3k5s0JtDn35wBtEyx8dd7aWl7FmMdZgxh68+PnXSVVEF8a3\nadPvtueFuHOZhAXkgd3TyvwT31x5YEwkccHtbE7XxS/MAXIDE64yzx+7zqch\niTFhEU2oR5h6WYqO92ZHDSZq8Pu4lnsl7c2S0Qaswk/mxduLfS+qRpaXVlUg\n3Z6VKu5Zs7Exq+sCyKPiXGjqWtBNT3kSCJrddGDYUgc8tnQfLbOLGkk39hsm\n7YmfUfXvRYLzl8506f73UZekCjm17TmHh39K5xkhUV4sHaLV0NPwTfNty2ku\neHAFroXpaKDYA071Ovu8ldOnMtwWVdQELqBrd+DgJWdYQHpaLx9mlOH+LRo/\nX2H+\r\n=Pyqj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBRFOgjuFmoN4qmN82MuGpP2YSRKUUPKaAGcMXOytmX7AiAzYAZ6qsbhZ8d8CZQY8wsk5+BkXzKzWOjdbyKwRbCgsQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-messages.20180912142203_1536762256095_0.2964068299908702"},"_hasShrinkwrap":false},"0.2.0-master.20180912150059":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912150059","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.4","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"423a776d93d28621377fcaddb3b77f34c036cb67","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912150059","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ZVdYEEYQjlIgdbcqi/40iI86hIlIX0dDJlA8ydIGedZUbXuBWCX/qW3kfc7BylpvLQ1+sk2MCKS8rS/EtUiSxw==","shasum":"b7795c4db99fc8ea40120282170b5e42b3ce0165","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912150059.tgz","fileCount":40,"unpackedSize":721822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmSqgCRA9TVsSAnZWagAAru8P/1kh6nnY6M6k9vUB78Xi\nAiMv9IqGwBRWWFIVJJd6gMvIPP6zCwfv6euaJeJYeQiuhwwJOIntv/fQKHX1\nBouhcab3gTpJYp5KuOjBHDYlx/4r0DiU0W2uoyqAWX0L4a6q8viBa3lqQaEk\n3ZJZ4DsAlZips4p1de5VbLgztKcLegcequlCNepII/PHMT7+iGv5p4giGBxg\n+aehijGxp/Ws8JfItHIJx5OyKOa/CTN7Py5FBmRry7NEa9GtpmYBi0q4j4hG\nBKbIMhTCLutHnViUtboSH/nlcXTha5sxOHOIl73kJUaKvF+1GX0Mg7vRxqzP\nM2j/Kqcd0jJQHnG9vM30wlrDV/pX8KauZgk9FKLD+VkR8EDuGwOyXcHIiM82\nwH1qQfdlI+2q9wf8our2pZtLZvd2ZS4XEFlY9++W0pGdE2rD7hX2LMO1bYK0\n6aQQnDWl/M+EPZFEZjSlKbutJffRxrauF+KxJEz/htGLfxbSHqLq4UywOmk3\nyk01xiNJNMSDU2vJuyzp+ApAtnkbq6uWtKoCmdaPfy0djj7IoTay2sVE86M6\nzhTdPYYppCnILV5DboCwa0CU8Wco8z8uJaXo9b5iA5PQVJtzuWr5DKGpyRq8\nkzTF6rKNOy8A8GhmtbhmblrpBGIdNdgIg3IkoS85MNBJW6MyTXMWiq1O0N5I\nqMe6\r\n=oGUf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFu9qCtGQTydE4aDK/x6A5cWZSfwqHy2qiUPSB33WRcDAiAJ0jG9+fxwZGIRUymUGnDxgTQwNuk5llWAR+zIMxlagA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912150059_1536764575959_0.3613291501908875"},"_hasShrinkwrap":false},"0.2.0-master.20180912165711":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912165711","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7952eb330508220f8752e4fcaee35ce0561887c7","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912165711","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ISj7GtijPVids2cm8GrA3vqQqh9qA7Tm980Phnh5e1xgjejgNasiC9esQ7iU1q3JdmKRC2HT1UqPnsKBZmnAiw==","shasum":"ee81566d0d3aa3e6ca5c8fb84ccc641c545542d6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912165711.tgz","fileCount":40,"unpackedSize":723134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmUXYCRA9TVsSAnZWagAAJ3UP/0Wum/l7kBW5NEaB9cMh\nb/e6oap2OMR7R4hazUWCeAMBTZmTmFk2sWBZ25r8M7n4qGyajCODDcMn+6uv\nenY1vVkAYlFSW+5E5PciMce2gLj2a/QVka5ts+GqZkZXM/rEA4EhTOY9nCY0\nDRLG4TYc6ZXDm8cxUMwLTeLSY3z1b7HuIWEa4efDmCRmo+M1uFeDijntJplV\ne9VKD911NngMA6pL0nYkFNOhfHFsTm6ha9AxoN9EVeSYRPIbJ841VCHpKaGg\nDpqwwnYA02frag9RGfSnvGV5OLMY6eXg87XnPjSJAdafWMWNkbHnHfC2ONhk\naGKvrIQ6v+k3MFFoGgQ71gaHQlkJxi4/iSqxjPxstdrzZL7d6J5T/czwZGE4\niolrbcfv9QD0nPM08eyZn3OnO1xkaoP0R/q0sd8wQPR0tAnU2+2Bwo8pr7zM\nv2KTU6iwKaHcge5V306m3AvYDbCFYIaEoPo4BbuDRi+qZccYkBjfOcvSbX2+\nOClol8bxf9rnfh0s4tBmEPVCsI4Eu2hSZKDXpRwRVFAeHSHJCYz+iPqJYQ8e\n7S6kaQsqDbsrYz/t6oUw/1cWvHxXEi7Ii0QQCjDMGBMz/OB/grKe4lLwDhGo\nypiNWLH2tr9ad3/iSWUsI7If+punpDMNtplf18x7YSfKDF+6IxUvRHLVNtUh\n4AzB\r\n=V3a/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERAYEwn4vRUXou/1c9BQkwFswbahtQGU01Ty57o/LQgAiEA00wvSSltHwiByCtAi/9KwGdrVoFtiexpHCZBkmSLkWA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912165711_1536771543312_0.27633046827878815"},"_hasShrinkwrap":false},"0.2.0-graphclient.20180912174414":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-graphclient.20180912174414","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"06c7170988f855de99ee051817e450f0e6c161e3","_id":"@atomist/sdm-pack-fingerprints@0.2.0-graphclient.20180912174414","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-7LKb6IhvAwiAi6D/V4/z3yC1hSJcZTsKBYZoLd431KbaSiW7a3m+/FUWb6WQSirT/+2Z+8d7rUQ6URlZMMcfQg==","shasum":"92765360cf58235c34ba077c510e2b3f1323458a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-graphclient.20180912174414.tgz","fileCount":40,"unpackedSize":721819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmVDdCRA9TVsSAnZWagAAsCAP/3KEpUUzk8toSmagVQPL\nsoROlbsq5RgeyfNnN4NflmSY0TMljqqzeWVvebqRssOHLvKqPkl61LSyz67D\nS8Vm1gj91xey+KEJfKAmB4JYkrYNosMWvLievkYUn66KaVcULIFXcFo1srat\nwtL8sZ6Xra+lfOOLN3NqCBvNYSROCPJMX9npSmDuWi9EPriF0kXHpRQcvpVc\np0r/JFI3VoFqq18DIQiF0K/goQmtPNhBFeWbkvGG/fPxoI80GDFx58yqcTyw\nOagwvg8XUxjOf241/F5Tc/rVuLWh6K4sYJRPIhjm7nlwh8tDa2y9aJSKWkM0\nTVn/TNppR4SHkc6zHW+QuwkTapMbfTiClNKDvDzQ/xpm6wX1MBPk5AneSTkk\n6mcBvI+yEx0lCAJ9IAYmasAa6yBbQeuWwTad46x9Kvzk15hIXStohoaudbtd\n7aQQJBQBqntbNX1yrc0wq1R6+VrAyo4+QrZHX6avMEJIqoxWzHotf/O3wjUd\nBlmOLZA56r8+yM1IaAwXHXTVzvq2bpiDge3I2MZBWYZtlM9MG2Wt1tVtJLNN\nhMIdjrc8eQZem3Q9flB0zsXw+nhejCjOB1YuISa5PbL0StRSakD+k99AULWI\nMmord6ka5C3b64pFCw6jY5pXzsuOzB6uS3WVAj/HVT8zKjnHFjdTgErCjDk1\n48DJ\r\n=X7dZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE/D17ihwcu2IfUVwNPgIVUWNgRHd+VHggpjuX1x+O5pAiABZLXi4xnFr43wcrZBK8cmaWUrPUzZlkvSVXhHcaHg7g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-graphclient.20180912174414_1536774364910_0.5493208565632637"},"_hasShrinkwrap":false},"0.2.0-master.20180912211547":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912211547","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"5cc087e932948bbfc4e0e225a685a406f284d669","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912211547","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-UM7PCfqEcse3RX8/sBLAasssOI34Qo3n4k1Xw200lG+KXXDQLh2LTtYXf9cn5stR5PGbh8qF2ldMH3aiUawCww==","shasum":"4b40a8a341829b5390df5499413af42f2bf0887c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912211547.tgz","fileCount":40,"unpackedSize":723277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmYJ9CRA9TVsSAnZWagAAzjYP/iUoWmA3jzgzeUhHPv/Y\n0QWlG5lsRcx9dU5TJr8w78Ek5c0fouj/Y3ri3j51IaSEXFZd0AuH42/81+Gf\nrPXBegDou9eZhNx5/5SKLaxOadWMm+/3mJEdHv4UPTQJFWV4KzFqrn2QCwsr\nMDhjbCVxX1XIucCx0VZYNpCnYrHeyo47mnnrJmsHLG0ruvQ/PG2NWPyjpWgZ\nCxezSzEyCOVbkpYxzuVadjY2AeWywyQ4TRa2m7xT4c7PctWCrHfDLwtWSWch\nWMbcihu+LUa5oaoBExt8EBiLZAKZM+IfdTiubgGQOBjnvTnSr31Di4WIxLuP\nYuH6lKe3t9l5Snu2NXYmbY+0MBuWfjFckMjSeYVg/nqhE1rvuloh7u2M9oqf\nSORdhUOJBKcZg45pllhN4Vz+/Hs+tYdyK+hwBNsc/D/9FZ4robxTy3p51O3O\ngEjTILo/rcVcBETbWwRJdf5nSoEMsV+86u/bbXxdO4S/CyyifNNJPh0VEMjy\nlq3MVoFQo2l6r/XpAwPChCbISwPE13ptKRZyJ86Iv4AYprYbdwT3BAyOAFTF\nhWEN9TL9O7d88J3d1kWIHGI1Iv9eriffUgDh5AGvrtKffOBQPw9mn9Yideh+\n86h+OdMFKwuHQLdqvV2RsriisuEBO7LPitRkRTIycmIfX87vCnJQR1teTt38\nrdiA\r\n=cT4R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+IioguH82XPfRZAt3hfLaJ7Rf17awh92R4Sd84vM0DQIgJsdukTqN8ktCSpZkjKh8BYMPTZdYZNrYaEwkccgny/g="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912211547_1536787068983_0.8273208489068307"},"_hasShrinkwrap":false},"0.2.0-master.20180912215023":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912215023","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"0f173f45709b816a43e99cf09dd75c428d0a699c","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912215023","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-y0Wu9F/uLl55nSVxs6pB86AHlJn2OVBIr9wsXgOo6BTnwWFcGF80ZMe3nSkxnZE3aPaSVMa5434YEJhXijEXVw==","shasum":"bd97b3f7fc606668f513cf15b7f810f101e7154f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912215023.tgz","fileCount":40,"unpackedSize":724487,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmYqpCRA9TVsSAnZWagAA79gP/3uH9cGMLcZeSLEZxHba\ndrKloZMms54fm7/jwUTHzesBM2aQrVWh4/lfTefylHvM402hdeDGUEXihbNe\nWVaUxZztoMYCNCakWIHGycTVufZjFXUCeCllLZKgsZt+pNsaQb6GJghMaQPU\nW6onI/pFcqNuGS0OnkNEnW/0t0mqVFjD8khTpAjauqR9a62Y6ectXA9LwHBV\njT/kVmrymfGJ8mGieak+FGjv3B0FVETA0pwtIxRMJuehdH6xpiNpEX3IunZV\nohqkwY/pbkigNm4/SeFU5zz/nppIoSaggR1kgYwOCECv9eqH/botcWHeCpgD\nu80/yO8sdv/qPDjl0nyVEpidbeSm7Bvva6vu8v//X0GSSivham21Yly6HWLT\nk6b/jRB9+5dRaxgKfwbvOxTI9Ah70pS8aqRuVn0h+1o8gYeGs50SwI5gsxVC\n8Zfx49V7cGRtvOnjvcq4+uA5mh8KKT2dnbwp1zILiJTAs1rO/9PDdHyWe8T3\nfoxK9xr8BybBXlM08Bp+UuRmiHgMhPq1dgnxJFvoWlvcUkwjd7RcSVg8VJFa\nZP4d3H4rKdBU9OpBjL+N9SEw0ewTO4GjFNLYplXcZr3+Zo6mvlH4LMmfMvll\nNB776o0Ydbv7OfcS3TDMIOOYJjpUzO/WsFtE5FVeygH+nH/zDPCZQroBQZa4\nIs31\r\n=ZHhr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDvPMO0Xo2LacNJYeUStMnaiIz41Pk/BgOkBZjcaE6XBAiEApgaKADsMQs0q5O+aW7tV5qXF5puULMr0cRqDCA+57S8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912215023_1536789161398_0.9629769046072216"},"_hasShrinkwrap":false},"0.2.0-master.20180912225051":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180912225051","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"^1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-master.20180911182544","@atomist/sdm":"1.0.0-master.20180911102033","@atomist/sdm-core":"1.0.0-master.20180911181754","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"d47a65b371c8519174d4ef4eaa6ef75c3fc337d5","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180912225051","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-2TA8COKq7QVQxOm/ugigoTJZPab4DwB19T18Flar7xHFm8nN3XBeJG/aFxUw86ozv0mgbJ+IbjsYOxRNDBeFUQ==","shasum":"4b268070883b88cbdc11fafbcf54f629e2a183c7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180912225051.tgz","fileCount":40,"unpackedSize":724477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmZo5CRA9TVsSAnZWagAAbMwP/16pKZOcDsnHR4DB+q7/\n8/WndFyeC6e7Gma0yGxXD7M+r7SHd08Wem7kC7eM6rI+An+M33EyBF0ZadNx\n2B/VdTTBgdytkC2sAigSCl+pd2+OR2/HBSvQb3tXAty2fbVRurHAosOcuKBK\nbBbD7HGPLyXdtOJs0yULjLy43X4GZrYbT27diwpxd+jg3pHDmzF6FNMygl84\nLum7M4G1UERxlCjUSoUMFCoVVjJRSm6RgfrxRKFeJIcRNfuLtKaCbSDXE1lk\n2NtVUpRnJj7XXviD9UxhvmSxzLoEmsg1bwJEin5XH6ACQrBLF2m/gcjdiKBe\nT0RVCjTH1VwLSx50qiAt8TkQKi89ZyCKF5vXf6D7hAG7H5WTHqZpmIiAglcI\nwZniZWXSItNb3R9Jx/fzpfI4mT+nNBCZXHaJPtJ9SN6rlkyZi0ycVo0SjvUd\nSKyenO6Lspzb7goK15s2YvlUZaqvnR6lwL2giBdOi35hr33gxIwx+24tMDlD\nkAjALY+0BR/mjXPihSePjJ5dp70y79Y8nCE6LFBDq1lGgI8xUv+58Dn6uAnH\niu3QLclLQzxwH+qRNTSSp58E7Jtw6iuNNXSi3hhwFr/D5ZcDWLUizGNW6FQd\nImuI4HtehmilXc0DV09HqisGfQoEFb23ka2Ex4n02wvKwZPDEZxCbQCmerLt\nO3Mm\r\n=YTk6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICoLb1zm7cjbLOXkYwiwp3haF3HM447xaIBZy8EBdoB7AiEAxS+iUO7lF3yfsGQdSJr9wiqXDUGrRUZNzU4RuQhGrdY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180912225051_1536793144969_0.3165217304989687"},"_hasShrinkwrap":false},"0.2.0-atomist-update-branch-master-1536837416403.20180913111710":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-atomist-update-branch-master-1536837416403.20180913111710","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180913093131","@atomist/sdm":"1.0.0-master.20180913101258","@atomist/sdm-core":"1.0.0-master.20180913110440","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b166e532b3d398e5a68e9f397d4c3ad0a15341df","_id":"@atomist/sdm-pack-fingerprints@0.2.0-atomist-update-branch-master-1536837416403.20180913111710","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-/SNeLBeXFWhLF0zlkDBN+6kMwXzBLsHfIL5w0D8pkW963jAORYhDSiyxybxefaHAB8a56btfL0AxeHumOJcl4w==","shasum":"1d8079b6183fdf8d8d7aca730e3bcd351e0305c9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-atomist-update-branch-master-1536837416403.20180913111710.tgz","fileCount":40,"unpackedSize":724533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmkieCRA9TVsSAnZWagAAZAoP/3QMloyyEegf1PrP+MNa\nvNKoT4cNodj4W49rLEb9Evr0bCUhqWeepDh+vkeqq4O3Zgfvq4Jelo7dp8Ym\nurmDe4GhYX2EKPzsX8RtBNF421dc9kEf9Qr/QHGmGVPGDqNPuabDgMTGTgwZ\ngt71ewQg63erUiDRtRwTxQrwxGPt9qDbSrRkzcAnZYZRGOMXCt3k3Wp1Q+iH\nWp6T7Myn8/5SbQGkrplWBqcmTWVpYZiwprhYfkof+iv1iiCe0Y80tEdH2ybZ\nY11mefGJxLQ4hnBe5wq/Qh8Oykbz63JsrSwz2tj6wSNiqAJa5xR2udKd+v2c\n0MI6kNeonhGUJxq8jb0RxxxFkAnsXTXX4MCnQ0u0QAw2qEWcHMy9wS0PJzkS\nhdfUYw/CJRF8MC+olXzemegAQa4eCN5mNWJsBTxc8BiRXdVktvCOpA/F4Hn2\nOj2QqxECaWYnBPZZCPxcELlsDoQ0zs0O4iniAa3Ib9mQxHd8rcu3XKPODgTE\nNrQpEA4kSYhV3APy5TbEZavmB1elHMkP6VIGjUk2Sy6feMkMu5wLaJBmyIQz\nyL9IWZeEWRHs6a2t3h2+yYOQQhPyj/Xk8BR1bKTerdTZSmrSyjaogb3dYeH8\nbWi6AXqBywvjy6Ch/D47A8K9l6885c6u0OOr0/rSC39dYL6fjk3DFSEA5A0y\n0M4t\r\n=pnkr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/8TaftsSChnOdtqebsUQfDSgz9ECiXfW8w9z5rnk74QIhAKJbnS4iShojaN4gyENUkyrgsD9Oi0Vlzkf9f+u/sxaH"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-atomist-update-branch-master-1536837416403.20180913111710_1536837789725_0.2548867734399818"},"_hasShrinkwrap":false},"0.2.0-master.20180913112341":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180913112341","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180913093131","@atomist/sdm":"1.0.0-master.20180913101258","@atomist/sdm-core":"1.0.0-master.20180913110440","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7e7e700623302d6394078cf8e7af832c81672e80","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180913112341","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-i492k4dveNntDlGT/0m0ENDvEml35Gc2DyOfEREzI8wGsQRiu/szpeooNc2Rm5fW2j+wb1+tsCFwwq5W+fbk6g==","shasum":"0b029de6e109367de80dfc066fda0f2b0562c969","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180913112341.tgz","fileCount":40,"unpackedSize":724497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmkoJCRA9TVsSAnZWagAAuYUP/jg5AjhzBHBCMsPrDakB\nAA9Y43Oq1pBFE8V9LZ4gsGRp33VETP2uECyaHe0qhf8J003B0WxxHZut2Nsr\nq4gQyo/pDERMLu/NRB2J+BqHWwGdJFDaiJXBu/qmt3acqiFqpHj2ohqaV+Cy\ngr0f4L9ROpkMd0PEk42ohv7udwf8jd1gUqAinsOR12e0sbzZAxKERjT3ZN6I\nq0rQYDwp71t7ilmO2FDZGkH/dCDo51v8ZPs2HSPxDd4VQej4REJNCYDR4PlZ\n99ZeLbu3ndXny8ABQHeA5gbFTXUsq+yWzBGyUl+JZaItRUgVzfg72zMXaLmi\nq2ycOIIhpJQJ3X9m7QtXpngwp8x6GHBiIULBXk3GNQycgPivdjIg/72wHiZN\njQ9KvARF5ShKSRWUYl60wPuKccNwNFzemAopXbvKidGFcNCPSELibzO3+0ol\nhoWQn5UmpGxHdXQuS+CFk/n5/6W0OzIPuJhkz4i1rGCDhZZfomXH0muHmQxA\n2xOnYnDxEeY5PAonNN9Gxwcv2HzhoTJYH+1rK6CL0eN/ZbtmxYRO7T2VpKf7\njq3a/zzfmFmv8o4YHGYws7mV6YXFAFjd2R5EceUBfE+kJMBaDthkZrYQzzOG\nc6wnKtum4Hi8tNC6yB6KOVnj8W+Iz70Lb2k1neyNv7+h4HjWgQwAyFXE5Ydm\n2PJz\r\n=gbbG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL78Vf4hFe/TTGh5jo9WSBcqwDdlqEpIZlN5qEZNwAGAIhAK0UI0J+unMAeGHD8BjVP2i5K6t2qgySorYggz5NXCow"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180913112341_1536838153213_0.5074643973067912"},"_hasShrinkwrap":false},"0.2.0-master.20180913195353":{"name":"@atomist/sdm-pack-fingerprints","version":"0.2.0-master.20180913195353","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180913093131","@atomist/sdm":"1.0.0-master.20180913101258","@atomist/sdm-core":"1.0.0-master.20180913110440","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\n1. Add the extension pack to your machine\n\n```\nimport { FingerprintSupport } from \"@atomist/sdm-pack-fingerprints\"\n\nsdm.addExtensionPacks(\n    FingerprintSupport\n)\n```\n\n2. Enable the `FingerprintGoal` in some push rules\n\n```\nwhenPushSatisfies(IsLein)\n            .itMeans(\"run some fingerprints on your clojure code\")\n            .setGoals([FingerprintGoal]),\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"9086bb14ebd4a4a548ee7d0ce7dbc355d31fee6c","_id":"@atomist/sdm-pack-fingerprints@0.2.0-master.20180913195353","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-HH78moeU1rR75/ZtJy7FMeGM8gpbglt7XrHhKMAe9Xpu6Wyw6c51o9JtGEm1opVC9z9kQr4Lu8aLviOL/5bnBw==","shasum":"73b134e96e8fe393af9e24bb19bd25978319c232","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.2.0-master.20180913195353.tgz","fileCount":34,"unpackedSize":423413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmsDnCRA9TVsSAnZWagAAG/0P/RZ7Uqo8IBS7bT4Z2HEz\n2TgWNv1oPN/7y6Pqtiaa1+QX1qKulSgk6HLbyk+o8XCsjAfqMNS5gwvI/OlT\nSm4lB+2xaWFVLN/p9AhL479JvM5m3DqQmEuIWZxKsbbmAzuILjTCWDPh50Xf\nJ6qWXgyZMT6B48e1aybWYkkPv5l/+zDIh/S90E6MjLzKYW1u0wQJSYobBcII\nOp/oeTWW57uhT8+Ej9AZYnQxV3bYkdMlgEKey6hBFOyHnGdQz2juOpINe/RF\nTQQhzKpLmZGqIAc7oz2ckXpbCowewdlUZ22Vz5ALapyWSlcHaZ9wsvp6T0Xd\nT0BiRyk+gJ0yX9xGK154orKHaYV4a9kgF3IY8Web4Y44wfSEqi7XN0TJAnVT\njBFXTfw975+pX6jdJvqOETg4VbJhHhsyB9amNWomD+a7FWk1SeJyau3AA3m0\n4KqMQzLZ6dbBvQGrXn1XXbv0IaAANxBJyQlHRKfXVzLw8Zw8uckuGVUnnDcn\neLgG+A5L4NH9SwDf1NAtLGh9cbiHxjVOv9hFzjgKS0STRWr/rTrDetEJm43T\nIrbSsVRK4idj5qnnY9GimyGbWLh4J9axNUD673xF+P7uqo86AY6bxhKaXNeI\nnNZEwqcsP5JflTukP1zjlg3i0BAOyDp/cLYWUjg1e9VytBSUQ6kkr9yoLECg\nRtgh\r\n=w5JS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC864IPBhPxjxKAjLGQYnYEOhHoG9epzX7JWneerdhp8gIhAOgR80gow3sU2JhbXE3FIZ1i0VvhIGmSLRN3MJX3B6s+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.2.0-master.20180913195353_1536868582434_0.8665709676476068"},"_hasShrinkwrap":false},"0.3.0-master.20180913202611":{"name":"@atomist/sdm-pack-fingerprints","version":"0.3.0-master.20180913202611","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.4.5","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180913093131","@atomist/sdm":"1.0.0-master.20180913101258","@atomist/sdm-core":"1.0.0-master.20180913110440","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7954f25d2f0c98a8394d6ad998ce36eccc3732b7","_id":"@atomist/sdm-pack-fingerprints@0.3.0-master.20180913202611","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Y81Sfbztwdknikxz++iZL2mZSeIENmXnjrT5I8KztTaNeN5dIaIGm9HvPLRmzIjNB0KMEq9e6RaqOSxT227Z4A==","shasum":"a8299254559451e93df8a2a4b1cd423c316a226e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.3.0-master.20180913202611.tgz","fileCount":34,"unpackedSize":423361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmsh4CRA9TVsSAnZWagAAVvcP/2VBw4azBGO6Gbu7KC6m\nX9kyKO+dWAh9FiNYxn7zmmwu3i8PixRlFcLpevDo/ec//v/LetL9L7SLYd0R\n26XafkD8fWSMKMcVOf/mPitevCfQL+WZHZzroWC0Y9SSvFxmJqtcKvuUEt4S\no4+VN4WcDO0+3NJNydVpUCJdgAvtGZRAfdl+wbPm9/yAbFweFn6cYbAU+U7H\noQkSyZUZLzN2eTIBlKtw8n2AxKp3d4HHIS1XNw/MORJ7z1kdtngfjPOo2Z/f\nG/n6H0AdgIhZnIpH4HiO2niTsFOQVs9GAUSQAobBAF7S35iGrLDwvZTH0iTS\nPyQNPOkyAIRDxa6RG1+W6hddWmijKt21KqKwvf/ByCf6KJFb0bIqdM7aqjbu\n/HBazZIlzE3XMVowfiMYi+gLP2JHAsDn46kUjB5VIkcDImXW7ruG3ae5qnAJ\nJ7D14Qda0DkzXQ+U2HuwzJHp93krkeKQRbXCbfVbRJj783gBhF5K5jrV145u\nofE+zVp49dH5Um3C7f3YHvBpjpfi1i1jvpCkPcXuZ/R8eZNtg+JRrYZFMYYD\naiR9AOWyNNT/5iZI/ZD/45f6VoMYwqTBQn3ReW+Y12Z95/x5vodgbGaIs1t2\n+RXz7ek/Rc9dGZ614F++KkpHKk4jBqtzaA48MOMfcvcz7r8AD/dL4xpOzIWL\n17k/\r\n=Y418\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWsh/G5VV6vccXnnQMJ91ipEJ7sSAX6RUl82VWfevevAiEAufkzgZ+LI6lwE9pCtwW8fGg405EON6LaLTcEnz2O2kw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.3.0-master.20180913202611_1536870519795_0.20916382927078558"},"_hasShrinkwrap":false},"0.3.1":{"name":"@atomist/sdm-pack-fingerprints","version":"0.3.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.5.0","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180913093131","@atomist/sdm":"1.0.0-master.20180913101258","@atomist/sdm-core":"1.0.0-master.20180913110440","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"3076e8d6484a060b47421205feb3ecfed85097c2","_id":"@atomist/sdm-pack-fingerprints@0.3.1","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-pLXto4qpXEBTC0Wi4jQB2cC6Jai7vXxrKaz+Jp2ZpGDy9bGna+kNr8Nz4v93tuCRgYnTQR1AHtnXJIGxPteD2w==","shasum":"aef0d670bb37e30b394e8868a39ec5f0db34164d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.3.1.tgz","fileCount":34,"unpackedSize":423339,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm0nxCRA9TVsSAnZWagAAbzUQAJuoFJASR2p7dpYtwEoK\ne6WmiIxu3+8URiw0h3LfczUH6PiRI9AKJY2QF/zn7eFY1YrcX4thGFv26Ush\nKZQuev6ysXWJ8Q4LBK1gdqIjC+Ubsx4cCUj9wMUesmIvfPdszymeXEzNLUNH\nKh+8IedctIHgeCJyDpXKOi50E3+X/zRYeHSc70HB1MhFhkpQ46xAV7Il6aUW\nV7z1p1EaSPHz+uSjxxmMIyEDL5g0mipRTV0KC15rwLNEBGC3NB2KDpYNLhi0\nC3yL0SInT4TpoX3HXM7HkvQSdWIFPunDw0URg7+zWVbeOMOt3kE7aE0faFI+\ndqJLOx6KxFkwYYVvUHbUbkK+U3KL5PYM/rAbdjFxhn6g+FIPJXP9Py8UTAuj\n4dmLyT5ekeciOmTg2UStq/XJJ9R8JDSeKAw407E5vQoghscfwOrcWdnjaln1\noRCYoUgpFqB+X61RbOZiwxjIc/AesYuNlndp3xFjfjx+oxUy8yb5F7DeFnd5\nQQHKrI5lW9IqtUu0K1zHV12SuyDVVM69ml2/HQ4/QQeIof/Cizf9AIix8Ei8\nLkh7HHYIJ2MOAqX75Y+ew3fqhFo6Ur1UbT1lnKzFbhGeSON8vV/bUzJS2AWQ\ncDmz3ktqvMnFoCE40Ct+uUaTyhKYnZGvrKUaVp28WIXBu50oUE803BIpfE95\n2hwX\r\n=OuHT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy9jNMwY345z9+nraX2vzjqyss47m+xMsyQJFu4FwqgwIgB5Xak+PSgD1KvJzWYd+7B1O4enlepPuDgfSIa+rh3Gg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.3.1_1536903664747_0.25616150570472196"},"_hasShrinkwrap":false},"0.4.0":{"name":"@atomist/sdm-pack-fingerprints","version":"0.4.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.5.0","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.0.0-M.3","@atomist/sdm":"^1.0.0-master.20180909210749","@atomist/sdm-core":"^1.0.0-master.20180909211148","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"db40797b8f9ed57382c67c299f16537eb91a7c9b","_id":"@atomist/sdm-pack-fingerprints@0.4.0","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-QCp9DmLzF5eLwd4QRy+cpUUhx3i9IuutJuZg1eEe3pO6wGPtr7N1yujfXDfgaEo1br4v2I67x+jDmekyOI2PKw==","shasum":"d087d1876f97ca914cb3cf8936e048fc9c3982d7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.4.0.tgz","fileCount":34,"unpackedSize":423324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm05yCRA9TVsSAnZWagAAYucP/RHHBQUSYItGiM9j3NMo\nR0AMyrZU+uwkz8xBP1KXyuQK4Em8ogkqtrRzzuH8L/amDfYPDEFBYGJXG3fw\nx6R9wP1KMivcxh2z07Qo2Lxlg28uMTOFwtE4eNJsVOf7BDRdsTOenC5Y0jev\nHgA82CknSM7saR4E9YcGH/h6EaqXbBkfyUPgnKt3otwLHA/4Z9UO7NPgyzz/\n0n6wjXXjukZM1uRxlAyoNs9k5vR7DBUiZ+vyR2Zs8uG6AwW60fttO+muO2DU\nJuMSOGcm14qe4Ilw7NOh7bmtkaGxUvM/Yjgd003N3P2wtIKz9WuaNryXpraj\nmj3oD7DITuDqFwLImCUWz/P+Pb6s2KbV9e6ZqnWVL6uqbEz4yXe+aSw0SV99\ncgqJYkzURaxCCNsU6cwR1AW9MobpatmkY6Dq8mu9JWn0P1MLgJSDPlXHSYwP\nLrG6Xw6079GwPHEXqHXZtaFreedtiSX3yHBYRu7h2hcMmYtX9hVmEsMIaRZb\n4Nf01WZocN8svLF/JyJypu4OJf5GiVHrH0R+xbAnsSg7z14Iy7FpXCA950EI\npDMXcKe53BDmS97rlsizDse58wmyC6GBWdPuwepR9LLDW2BqTtuCOGlK4twA\nBN9Xicmjcg/REVa0TCkq2KolVT/QFFPoZtyi4pw2xTgI7gr4mNkfEsGv8F84\nR1Vc\r\n=Kk9L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGQoj1Ow1agWUk1K7RW1zjk/6ajocviC9vqxXNXhWPFEAiEAqmGt1OEBG4EvoJZaOoc+/QzUxZS1ZeLxaYv0i2q+Pko="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.4.0_1536904817722_0.544843113759756"},"_hasShrinkwrap":false},"0.4.0-rewrite-imports-1536933556152.20180914142812":{"name":"@atomist/sdm-pack-fingerprints","version":"0.4.0-rewrite-imports-1536933556152.20180914142812","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.5.0","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180914103733","@atomist/sdm":"1.0.0-master.20180914101315","@atomist/sdm-core":"1.0.0-master.20180914141908","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"9896416e0acfcb462bf2e2ceba9d358d72f3bf40","_id":"@atomist/sdm-pack-fingerprints@0.4.0-rewrite-imports-1536933556152.20180914142812","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-FzW5ZXN827xTFKl75UEyHlCG5JWa8JLlFmX34+6pb6E34huox1zllmAgzoK9Zs/XLk4KF/3o/GTMPOZNiw3dDQ==","shasum":"7b165953bf0c1ce882a5ef0bb9c53f6aa27e5618","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-0.4.0-rewrite-imports-1536933556152.20180914142812.tgz","fileCount":34,"unpackedSize":422707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm8YPCRA9TVsSAnZWagAA9NUP/ifs/+RvlMFg7ghhJysA\nXU8laws+sKmCTjOdVYttt5r8l7Eqm3Pf0yxgc5GtB3PZ35v0W2NXXO06urta\nT2y3fLcdJZstGrz/BHUndkcpbit5EivwK7wNQcU4YH+YjUrUkRNZkuzlrJaU\n0Yi+ibz3G0sfQptEXfIx2nNj8XPBzeLrA3g7L1SiUDHzlIcJqLRYOwkEC8gs\nC0IsBxHvEFy06xfsR/TtrDe1LBb1d2ZtmETK1VBqIn4pYQfxnUYbs4nCac3P\nAe2Jm+c6koj63YG4khm79G9dlLiVDPyrm8DxeTtEvpzClVK1O1wsPlWwgBwR\n+kZXC+VsXn5ET3Dr7HQ1mPjZTeN4Rujs6d6yiY3fYSf3ev6T1lKy1ykLMDcS\ndPdXEw/k5u3FfXCYBiL8+fWBJHSVD0b2/WinnHYK6874XtZ26wHWd7MJCeJi\nex+yhXl2KTJwoFw1y2mbFWXp340jwBFsuto6vT+qzkXONIIj5MP8vX+PIWNj\nWvkQS5b8Lo0aYO/hcXQEEI36FNZoIIwh7y3PIfncd5qhY8N9JWo1iSMex3Vi\nsvgpoHZCK6aUEHQCR+1rke9YdOUCWuIepYd1IAHjX6MedKMgQ4igg62wDCkK\nbWBDpFgpcb4PUIlb2qo/aMyQr+XMfbE/jpZz5nTTQTR+GWRnOqfLuxBvYhDb\nJ/DY\r\n=LelZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2yXaYcJ8ZLjgq8NX1WxUABkJH2yzzBJ3dcAAYS6w2aAiEAsvH/nwX3VUFgvLLEAYk3XqobhCgilQTBCJuqH7u62+E="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_0.4.0-rewrite-imports-1536933556152.20180914142812_1536935438391_0.6477629468616928"},"_hasShrinkwrap":false},"1.0.0-rewrite-imports-1536933556152.20180914143208":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-rewrite-imports-1536933556152.20180914143208","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.5.0","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180914103733","@atomist/sdm":"1.0.0-master.20180914101315","@atomist/sdm-core":"1.0.0-master.20180914141908","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8a91670c7976513c85e05c343a914d205ad61d54","_id":"@atomist/sdm-pack-fingerprints@1.0.0-rewrite-imports-1536933556152.20180914143208","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-x2fDHSmU6vu1EPmE1Jbkry6MyGmI8fEQOfPkB8ezZs02kADAZW7RC3LAifOkO+MrfpFfDjlX5rpIdNW0BOCwzg==","shasum":"a9a8a23443d01965d086adcf64e92ba2a59c70ef","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-rewrite-imports-1536933556152.20180914143208.tgz","fileCount":34,"unpackedSize":422707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm8bkCRA9TVsSAnZWagAAULQQAJi/c8FiwoJFU4pR1Y5S\nZwXG3DFscylQkS32iE0Xi4AYFPz+8qViaWU4j5e96CHoIp1O7oHu35Ui8gLs\n+LsNa4Eq0O03avMFbi95TvyHITVb98GtN4LmAsSKng5t929wp62VMJlaefjM\nG44xoslB2S6/PyEeP36+ecu2zbD6O3fveq2YGlJTBG90jyoFBL5kLQ9Iew8E\nYlthUtF9Wwqp+Xfqrr8XjMXhAJS4DQRjTYghn32igx+6f9opJts4GgdxrBkv\nqJHPwd8zZqiy3WG3tXPGKEb3+kHzmLlGEzxk+Y6fNvcHp4u9awebX4nSAHk6\nBb2RO61subBrcJZAY9T3NbhlhxrlBYWQWYxN/Hj06anM4QsfdGACZo6Vi5iu\nnjZy2gc2vHCc2McDi0FD3VaGW6+EpdKHnxQOaYInbKkyr8YBtWRYP/fJvDYN\nBG53HRG/27gyVvLL8yeUye/C0GdnVPiE6IZDI2QZ+xHvXyHmejQDIJdhXe8c\nMUvy4uAKfGtrUkuJHTxb0UOlESvLXpw1WlVzu6PTuF9A1c31VCUL9IxcQ7wB\nGpHOxb20zH1sowYmdBb/8Mi0+U8Wb5SWDFxNPta0ofJlCknEM3/p/02syiFD\nXxhPdoLxTsWgHwDCGZggiEA8NXsRFymQyCvyyyd3x/2K9ZIgwQKCDdEhgSRV\nLUJB\r\n=4QE0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPruokncfyoKyvcJ+zIu5CbJZBTt+JU2E/gLn9XSTEzgIgFOjA9hffTUnOHjBZd2VucY+7fwvOStz8hp5620q7Gy4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-rewrite-imports-1536933556152.20180914143208_1536935652052_0.9699487822098514"},"_hasShrinkwrap":false},"1.0.0-master.20180914143609":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180914143609","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.5.0","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180914103733","@atomist/sdm":"1.0.0-master.20180914101315","@atomist/sdm-core":"1.0.0-master.20180914141908","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"586eeb5e54d100f96c8b8d33e56f6de58519ad8d","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180914143609","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-QWuBocRaC00/6Q1Tr0GMcQfKYjCpO2tjEvmsyqjuBnEijyR2ARMq2a+UOkkhB+YsGX6fCA7yP+3Tng6Ly90OEw==","shasum":"73fb9f07316dcc4ac54c05cfc0da13006d71d834","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180914143609.tgz","fileCount":34,"unpackedSize":423698,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbm8f9CRA9TVsSAnZWagAAUjwP/1P4ufH2XNPVOpisEzKY\neE2+6dx0l2RvpvYqjWma6Bfoypsdu2wTslax91qvDr+WxlAlOsBBsewZnJQ/\n5RWm+pRv6y+KjnR3+moc0querMHkBRpyOpn2GuKUVFo57Lx8zmeux9vRE72P\nl2eeryLwI7Q6ALgHYo9RNAAY7mUTKx1iUymfixTFtE7a292oFKAEAmICg/Ef\nbytMGbJa9gKfjGg1WKjHgy0L9hbBAx9KE5Ryes0RbBQ5rrA49cSo3YS23pEx\nKVGbHzNXjnCCgA7bG0ERF20QP5Xb0LSaRJxtasXDGWzWxC/HhsXfsPhtoGVZ\nbbRwyadZ8HEdPxTL/0LloeFgPfWadlqAPR7n3eH5AzIWNDJXfe+w0hPzptv4\nbAGuEUpPBzTFbz/A7dfc4FXyPbXvO6SuNuFtX1SHv6BckqL7vVaEKDcdeun9\naPmONPnvoBaHjrpR7R08gOXiie0efsCM1sxnPsUM0ACAgqKURjPX2+pVxoyI\njVjSchnGWq0G1o3Mpj/hsg/yipRzAtIFQqeTuNMU8fzmGB6Xcn3N0WbhSS1J\nqaW5xpvcQcnvI7krPKcPiOwGhv8hi/D1uoXCc47n080yi0XhNKGqHawhH2z+\nQb4o3HpY2IAtVgwRKTjMTFZo6DICeiRINkn82/B7wUvhUQcVxryprSz1W8Oo\n2D44\r\n=iErd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqfd3uAawN1FkklYE1C7wzQACd3LMUxeQHpX4Z3sMc3AiBVANyv9fg3OOs7OuR9lK1uPqLqJDDjtQTqJ3lCpMjp1Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180914143609_1536935932882_0.857474321875505"},"_hasShrinkwrap":false},"1.0.0-master.20180915023929":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180915023929","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.2","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180914103733","@atomist/sdm":"1.0.0-master.20180914101315","@atomist/sdm-core":"1.0.0-master.20180914141908","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8f411e922303b0709b143a928925f022416491f0","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180915023929","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-U1zgo1v46nTDJAvSCSWdqFF9g9kNECjFpPlcWIoba1axm1QST+9EYflUfcm5NzV/mPgSC8LeOd3OsV7A9d0Dcg==","shasum":"5c2c830ebe043af807c452b25109e29b5fcb084e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180915023929.tgz","fileCount":34,"unpackedSize":424999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnHFRCRA9TVsSAnZWagAAhtsP/22gyzuEqVylnUVK9uiC\nTpPaSoE4I0oUOdTsstneG3WgjYybO2myU59Z/f+fjFYJr5JqYtzexEG6rloZ\n+oiLjZ84olyc+nYEK1k0X4VvaZTtqLgrABxAvXwiDj7NeWAM6eM2uYmFj9PZ\nkAw05KLoOai/KY5cNNttf3/UKiBe9SLS3yT3UPtC/ilxtJ5fainxEDU0Eaop\nUtafklFPlOCoa7NPdpdF18eDQGra6MKnXNuxzcW2gg1txEIWaoVC/Iz1g5p1\n7okDUNHyzRTe+fpI1L9E4MtQpWTLRaFg2Ydgf0SVp3hAnt9RSlpXo+qQX8LQ\nIqbKLo3+wINj30VAUGdnqsiM0Sj+dDXWMFHiC14Y4MSnsXka475DBLz/dJZw\n4jIn0CW0Pl/m1nucyxmtVwm854RgZbyN0MiLR1Xy1tP2PVwTPEZFg+8l8jEr\nX7aZPFGbsZCM5q09cWxssgJCBwq/gSCmmp/Sk5zx2Lpb1G6WiTBUob+nX9nm\n3nnhtrSue5wfetplUVdkjkTS6Mi3HSqV1BOfUdtgrRIRz5UP09wKqSKHFlSg\nQqL83EpDkaGr8YqlytTMclTB1dOv1mYP2iyYyAnH/4dSznK0pKTdgkJAUUeH\nJjct+KG8orrFGPn/swKSbc29vEvWwliRs9WUK+IQ2sISihZ4kpoX6pXw6c0m\nPlcZ\r\n=Fxlu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/tBNuZY0evWMw9WfyplIy0gGSaB2oq8uSuT+W6V9p2AiEAvxBHmIPA8YO9Tcx+xdcz+8ohbYxfHsi2k1eBOkQjdKs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180915023929_1536979280469_0.42831813508059846"},"_hasShrinkwrap":false},"1.0.0-master.20180915035814":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180915035814","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20180914103733","@atomist/sdm":"1.0.0-master.20180914101315","@atomist/sdm-core":"1.0.0-master.20180914141908","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fd8d6439cffc34865aceacc0f07fa52a2d641d60","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180915035814","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-TtwCCJ/63gRCf18BOFuF6JDlkNWTr+ljLFlJsxFWdJqRskLJYBrfNW1dNY7S6lg4D9VL/CCKzgd1COG9zV9S5A==","shasum":"972e2949a4413b54612b147dde1bd1654094535a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180915035814.tgz","fileCount":34,"unpackedSize":424999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnIPVCRA9TVsSAnZWagAAplgP/2eCD/FhyROES5W72OXr\nKGe0H/LYaWfpbIkoWBuGACVhcRoMWY2+aLCllpIb+kLci+ZwIIMn/Zipx0pr\nX82bATOXLeDcERyTJ9kaKYYlm522e6k/AATbPIIyMCXWZ1Ktv2DNVbN0T6pd\nSMrdrpuPbcda53fFWs3Ywz86FUrrH9DabKu84IbQ/vzPyq2KxvvJ0LZgB/EO\nq4AzWhoDeo1dJOJRHONOb5kCThqBgKBXSUTQomadlkug//XtluIfjTmghS3a\nDc3Nl2uvDwI97WlMV32AzJVeWVziSRCKT1/PSxMNpv8gE6DFGuaDHBGmhyAu\nM6rSF8QZ/y+Cmho0ojUNZC6I8zMmaN5gNKYgh/4RmieWcrV9MLaIg6Bc8jdM\nD6NTUUIdSDy2UmheK3As1a4u2u46ITrOCTYqjEupP5YZSwTzbQGV6x6yAkQ6\nNZoxJ0OT7+pyYSeqdWktuy6UI2g07n8rT/pOwHH062eQ5PIzdDFsa3J7ct+j\nDLtV5xPxogjrctTbNqnzFfzAKiFfcN3CenC3l5YIiqCQJAJ37EY944WyGjrB\nu68RMFXf4+DXyXaU1dcBEt1luA4nRmRZIIQmdiNBQ3J+7kHsivMSq+0RO4UZ\nLcuIaqLHNvv5F9uCsUeRzGjfLu4GG1FzAWTES6dTeOI7mrQ/GB56qx5gXFD8\nnDxK\r\n=bDE8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCY8vDDHitAGnglpVHJOgq2PU3HJ8k/ripu4tiBoxEY4QIgB5z6d9hOcXrQ0BhaMUbggGDY/cDuoGU/f1xDBs8suv4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180915035814_1536984020604_0.08873883761888313"},"_hasShrinkwrap":false},"1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"22b44f54d3bf52b43a71bc77309bf5a00fd63196","_id":"@atomist/sdm-pack-fingerprints@1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-2G2kkZV2AIR9Yk3+EkWMwRayDD5Sux4IF4MZtsavEVkx0DT8aAbnQsMY8GyCd2xWTgaAInQWzIBD6ktBmsIeMA==","shasum":"be3ee4df2b9d36d07cb5ee748c20032d6835aa0a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629.tgz","fileCount":34,"unpackedSize":424977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnp6RCRA9TVsSAnZWagAAaeYQAJGqmh3iZWtqQWJZIgGo\nWhVsc6sFOgWGpeo3jlpxmvppkMUeA8H6sGtDIeETCtUcOai7kdD+r1VHXhsD\nSLoiFn+lRZn33apNy0XP6NjRE9S5ThTD0zFXcglQ1G9uuURQY2whVOud4Ik1\n1YlDIlPxvhS3h3UUau4daAfUJXnT4whkgisvMm4LozAtdfUms2q08UAk6YnY\ndpsZvbXW3IxF04NBu9CKZB2DwT6B+e5hRo20TrLqk+JWl5Z0/BqsDa1b9wHb\n6Vkuv62PMQbW6ipB2pMrQ5+cTrUpVts30IW3WQ9IQGsNYVWEF/fWO5lfMWUq\nO3BQ29NhJSUR7DtuMZfTJWkTDnYQnHE/Eofs9hkE1EYWlR5ztPbaqbvGr5J+\nlhbDlVRFO73Pw1JyjBXLVzlX5GnN5C0HpdTgHH1dz7D87Ayj3XTuBG8EZ0hK\nGFzFDWEGZU9jyhxJakd2QkRkGgyI1RpekhUdze48FQ3xWSrEFWUSN1mrWN5V\nQp2TIDHw7Qs94dZy2mWkK2KrvLQLqoe4rKrBhQBZTeEH3GZyPpCOhl0eZfwR\nXVUbv45AWXKyn1VrIe5jVPt/r8sTaLNRj8vvk/L6s/LbnRcgC2reEXres7sA\nRS+E9quep4NrOGhRXtRV7nnNS9LY53HIZqfiEoI/bwQDSwlmpINrpkJ9e67T\ntnYK\r\n=McO8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICmzoV5iSKFQGBqjNgybNV7SYvwFEDeDyx0NbD3SOA7RAiA8FUL042qroE+ba59aqri7t57C17gWyBtYiODgMGrndQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629_1537121936619_0.5270864179345589"},"_hasShrinkwrap":false},"1.0.0-master.20180916182025":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180916182025","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.1-master.20180830190736","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8f069ff3e27e33ab5d75232531f802a6ace6fb19","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180916182025","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-FY8TzoB3s8bsUvPRLI3/vykQ6Y1XOJwRuHhoaIG+jQOKnU8tcVLWc/Zz/bwX52pPzIDtbIaDEvwSOfwFuJWR/g==","shasum":"2c07de5233951905f9e7a0b01a23d18ec1aad563","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180916182025.tgz","fileCount":34,"unpackedSize":424836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnp9zCRA9TVsSAnZWagAA1WwP/iREHCoijnj8BlHuZ9fl\nntYfkPXgJcXd7qrzu9ZkF8vWgDJk9Zc0Ztqk7ZezkQLyK2AJ/Om8t+F612vD\n/vF2V5WVVfwxSqM/6HUiY8TtN/oHbfqotCCb5G8/Zp1BE9ZxVIu2g7qEhnZp\n3h/J07e93TIFRfsai0Kqdsww+h0o72nP9etPMNBe93qIn0lK7bqFMqieT2id\ntRBRgoePbZBUanPe4R7MwfzCNVk3ciF7ZVoNlteUy8UVzhARRpJ6+4JbuQco\n/GJsATpWNaX2mran3BY+jet39BPZx8EsFtaaSTporV3w8MeRQE+eLdn+BkXx\n0DPr1T8EK8SaG1O+Vyti4ycUBgl5dZTXvSagw0yBxpQwbWZKK0XaWzgvYKG1\nHVEpWAFSejg4IynIFWPgFOeawTNNN7LdJksi8eD/7SsuBjHIC+M7CW9cbM15\nmkRfIIpEECVjRw1+NwjLySzEHBdInKDZpM29k7IbT/p2NUkd0PWQ2robU9j6\nx/dl/4hDlQtGktFjQYoPgmhOA3AFejNhylwv0Ix6wGy5rdjGdzcBT0V0knGj\ncaWziaByep8djgpgctvmQrbdHitMPuf3U05o0HlwXtp/3LH+OCWu3ybMPHWa\nGKG4GaCxnhOOq5MLU9eDadfIP2GAP9tuMMxiSElIoBekP4GGB2r583up50dk\nPLLR\r\n=pSCw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWiVQYBixkCSZkwDgUAC29FXPgdPp7suFjd5SVw+stzAiEAicxN863vrXlr7lSx+IAu3jy0bcNQfR6JLbcEm5nStbs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180916182025_1537122162780_0.9140090278907707"},"_hasShrinkwrap":false},"1.0.0-atomist-update-1.0.0-1537123146515.20180916183913":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-atomist-update-1.0.0-1537123146515.20180916183913","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3e616e3b245da16fb9edffe225659fac7564c6f6","_id":"@atomist/sdm-pack-fingerprints@1.0.0-atomist-update-1.0.0-1537123146515.20180916183913","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-enlmt9URpu+tcR326zp22cCJeY7dzmjkw0VuLWruGOTpcWAqLxmdeM7dglXtiIaIfgPtygQ2Qao1mextlB6SDw==","shasum":"a6f2be855c27857a57fcc376ad8904b7c2e33a3b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-atomist-update-1.0.0-1537123146515.20180916183913.tgz","fileCount":34,"unpackedSize":424842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnqPWCRA9TVsSAnZWagAASPsQAIQAMTPKt+HAZOM/gXp1\no98a8B3ai7/eUtkX5J2bfd3tr3EHE3j8lNNhvpT9irmo072NtGgdQGQrrXt6\n8LPh/B8Mov3j3ArDRrunBmV8cF7XDgAarZjY3tR2Ky9xHxjP3pw8puF4xwTV\nHO+MYIhn6Mvxe8vwLzh/OdqbGjXtoCTY+SjROVNAnmUBWrFA+OTqBCtg17U3\nhFqCjSAgb7LxVfZqp8Pji6N6MyF6Wjt57spZvsbjgZG0cGw5swXjOmowg0aY\nuegi3lwhLtXysR8h63LK/pzLct7aNcw0pVrUbmISJHngp4+gLJUSoyPu+XJM\nvTZM10DJptkruCmxv9Bk9P70x1KRAY0hhiWjPRTiWRjK1wVaA+wCspJvXzEd\n6LHWJvOTNlGFoqmNlAdXaTtuqRV61Yxq9d6vfD2WZEFEpKqEbXPkaDomsPcA\ni9cZLHGS+k9eToOMzQgR11ggW2B8nHHJSnp3lJUlNei8jge8frGchi2+9K8k\n3bxT09uql0TfQ9XWy8mNlZwKThIlPEMKJ+5qJWkeLeo0dhKYOTWjkTfQgMh+\nNMkscgs1nTdXy0MdBEtOz/N4yEaMEKo6QLLaFFMI++bWO2jsSYmkswIGFwKZ\nc5FiUyMCDePY1kskG0eeEYASuJU/myzkrvfogalhYy4KoKZKM5wksbC2XcNX\n12fS\r\n=tOWK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFtLDFetJEFrkJVwrThhR1HQ4OyJf7jvWxqmeQARWe++AiEAnXqxBeJ8adngtsWwZWDOIUSdIBqfAV+/8dalJ5IeUyc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-atomist-update-1.0.0-1537123146515.20180916183913_1537123286162_0.9439342682552432"},"_hasShrinkwrap":false},"1.0.0-master.20180916184241":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180916184241","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"af2f97a1f3b53fb5c39a84fb929eb7190f7b7a16","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180916184241","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8VgF77OEp3/Qma23rFtD/iCsB7OL6pK3dw/VDD/+UXUEXP4jVcQ4h466V3/klhEKbvSAi0MRPKklFXS0Ov4/0Q==","shasum":"8b85d77f6c6d295ed38f8e1936e14c883373da50","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180916184241.tgz","fileCount":34,"unpackedSize":424661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnqSrCRA9TVsSAnZWagAAwH4QAJJLUkpVVwRnA3RZ7N2a\n817hcdwNGCal6Bnod9iDKklfwYKrX11oAXrrO5gFBLf84o2OI9JUUIjGj+qs\n5dPz3iEpt7iEj7E4soTZmgc0SF8EA8/8rlxfV8diF69QhL3R5zuyLBU7FooU\nySYchsRclNdnn6fJSRozGckGA0mfJH2Ujxw1SXPkWK/m7wIeNJwl5p7KAu9G\nmx0Ieb9kaaRUY48pC133lOIcvcyiSwvo2pB1YQmIG1UVVZq0Uv9sb6qGBj7o\n6Mm4cGuAzrpeXLk/JGxsvyzRfELsU3nKGthEYNntw1M3g4D2CEQ3AH971UyS\naosdXjtMGZmH+q9IsKELAuFnXstQgx0UDmxJ9vpAnKxQ6CIGH6sfBSqe0lwj\nWdvOzxdagKvadMuDCTGLGx0ugY5G9YkhQQG10iYvSL1a0PJHDQtfea6Y9CrY\nabB//dMmIK2Di0B845hP90BYfrWIK8LO4Q3M+iWV5SLrD9zP8VzYdl+upWXC\nX48Gdxx6YhScJIV0YXIu5Kbp0I+3TaD0CLIQfuOfNQ6l4Z/tOyVjEFQauZVs\nQtK6tOTFfJyK0hQh/AbsPlR3QAD8C7U0bAkOmJZTPqP6nXJv9ZrQy5Aj3JLS\nqhdleLEzHwx77o16nEFRvJ+3dmKGpnmK1AqH1lNnU0W2qGjb1WcEb90RKE1h\nPJdi\r\n=caYR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtF1ydobY8saBJaOkMm16VhicQ7J5XinsBlKwjIAZXNAIhANQEYQdOb3z7hN+f7PP2Hk1vBaX/i0KNzfE2nGtqvdvG"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180916184241_1537123499026_0.035761263412376065"},"_hasShrinkwrap":false},"1.0.0-M.4":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-M.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.3","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"af2f97a1f3b53fb5c39a84fb929eb7190f7b7a16","_id":"@atomist/sdm-pack-fingerprints@1.0.0-M.4","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-l348s1tXdIN9LqfN1amekX3glG3dgxN4i9Lomn5sA8mQZQKtpAa5hDSMiJpj/d+bzI9smmFGd1UdzsDomvHlQQ==","shasum":"72fb7556f9cf388c639916f3ba6b81cf297c1709","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-M.4.tgz","fileCount":34,"unpackedSize":424643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnqaYCRA9TVsSAnZWagAAhJIP/03uBDDNIAyU94PNu3C3\ndfCikzSKex80vSDBj1RO33sLfXdgqLcimufIiVNppUuTedJr6e8gJTfcbdCA\nV9sMXlUVr+m2cqs/4F348HTzJd9DOemj6U3o9JJ9tMzejmZkE2DpmKrkHYjQ\nXVgwWZUXXdN7MuStbkAvMW7bBcWeo+F7yqq18xhcJra0aY+A+3NU1mGlLzZk\nMQ8xlR6bQMJKr3ZK40bNHXdv7VqJBVmNHI13hidYA7id/zZH/Qz7FvfjLAud\n+qXsqbmPcHHbhm3POoRUStt7QAcdKtT1JIF50LT+CXJ6/FhKUCngtByeWj7I\nWPCiWXzW/YdJf8H/rKSFqAxcyGWM9OXAp/266zTzJUqZYWbRuD7wKpDQjUcX\njatOQHYFwLSvr4wxKMh1C6bMiQa/tCD2tF2FaDnKdQmj1B3hN84SdKrA558Y\n+BkYXcMULMZ8rCLLPiyFk9WofJwy91A7AGJI1ztAziF7p0gl9bkPa2YXtUtL\nlcmVllOjEhhPz7Tefyh0A7kj7JiL0bV+DIg7qI9F6nOICRiaTYqggaMjoW8G\n/sTSCklvOcfoqBGQ/ZShCmxXsNk4JNy4GcC+hPzJ3sXXTXQcPW2Qc286l6Ox\nyQsy2AntaK/vZQp6q9uL73cF4haUYzUG8dLszv+3W669Ke07Nx6P6esOG8II\nwPrb\r\n=Pqlb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRywNymrew3t42oGpk4nLaC2Q/UulcUgiwqRQnPr6+YAIhALb+qTqvdryn0nyg0KGYgJ7Y5dsqq1HakNlpSvMuXLhg"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-M.4_1537123991462_0.025001412973737258"},"_hasShrinkwrap":false},"1.0.0-master.20180916230822":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180916230822","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.5","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4899566fe6a091be5c9563c1846ef7a5344cbb01","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180916230822","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-K0eKl+W4GkH7kbLpnb5U7SEcG0Yavg88Jr+ScDLzi1NsTMvdv/A4fPVqXJI4z+8k0ZCESKcCTL2EAGlVhQe/GQ==","shasum":"b59bd2a05890f4711f017854dbc9aede80e2cc22","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180916230822.tgz","fileCount":34,"unpackedSize":424770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnuLwCRA9TVsSAnZWagAAD20P/3+Iqim7wySfehA8QUba\nD1OzfC+aOOZV/KxvvwPbabsj7e5dEzBl1S0wuFVHTqQ+fGwwcXFqVvAex5AR\nykKIkNQyLRNNIfUvQCao9vSMY6lJ3Pss8O6k/PTxFgstP2KNaM1Hrc8b2HVy\ndNDP4B0AT1fRv4AxSJcSkQfjwcB+3NTpEeGv1VwSeSfwdByRL0AjMr4T9CQJ\n64hy6ZY4c17ajPchKGhpMeYhwQFcnOcev//M+n+u1geAJ/wGQvn/kCAnVeb3\nvvkhpGdFGYeLGyXZb85qdEwdP260mKYzgp0arp+PUzmPZGI2Op+EbMMpG1Sy\npB4gHr4LuZEIzKRbGsag3U99+vMsrbyF8rfF38qWtX4u4H7W1ZH5DW2y+blw\nQcwIJCep0YHQ1PCvgRqliLXCVO1eMkuUnJNA4IBHjluWrFJ6oBdlBsj/P7gi\nPrj73MAithE+cqp6jbgRBpmTIDnIk22zS2jEmNBTr9uZwUa3hzClPkV/zQxd\ncmQDIWDzeXouTabABlxzUXaroob589b3A7MwUd818uCMrnpA0qjIpADqrqDD\n3dIkUe82GQaQkN8JgQdI7GatIQICVF0wC/c7Zb6xP/8H/KuuQx2fufQjYLDg\nwlVumZdRY/SbB3Wl4tC4ksbOencAMKyxs8KWc7O6nrpPcLdJj4qecx+kImxW\nrRe1\r\n=jcRe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNxNRN4v/A/HUv7NSAsmU+Ugq6Xm6uuQhzf983QfkHWAiAclfsrqrmx/hvJXqwBw6N1mJHHUnaP/1T6gVrxEMomfg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180916230822_1537139439504_0.6598712761327843"},"_hasShrinkwrap":false},"1.0.0-master.20180917204138":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180917204138","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.5","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"2b80a2ac41a8c0ab822a46b93e1741daaa4ae1a9","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180917204138","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-O8Tk2btpV0I7BAT4UKcExSHlX5cOSddlFJmLkNyiBqGB74L9RC1aLxgY+h1WMXbVVukgEXb21Iy15DaEO72bMg==","shasum":"387fdefed4bb81248b0a1079a6ef522af503a97a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180917204138.tgz","fileCount":34,"unpackedSize":426039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboBH5CRA9TVsSAnZWagAAC4kP/1sPH7az68GUy1K9j5hD\nwS7f+M0Np8bDX0IQJ4YMTAvImhgnSQYFMW5J+aX1eGH/pmHJR7UdehBLBrBl\nUv4LcoKsThXYrNn3pOB5k5L9YIBaVF4cfLLPPpFdt6rjo+ZaIafElbaRyh1H\noQKwW8Nq06+gOEFg1a6+C7VzolJF2jlb1KkF66LJ1Pl3EhtRUua9UluHZcB6\n9l0dNhgWSJy/O0Zq+FRzy1BnKu1Ag/ZmwzI/tL5+l1dga00x7aelZctvCzac\nB2nyeyTbQrt7AkCYK2fVEKG+iw0P2/Yzbathki+t6vxJb7aHCFvb6AnymGVt\nczDOC0gzeitP3GdzxdOd8A+eQUqq0zC+Ophwceu8Rjdbmj++1Q1ZXh6DzX2o\n56kbvKRbeMtbSjyP9/IKEMPCfdQbNBQqCh7hedUvRA3BzDIGaYwFyS4L3w5w\nldoCZV3wkQwJsK9oURBmlfSufXKpcBQjRFtmqvKjeps2vnxIObcrjxSTqoCT\nqqDmab19sh+PPn00mt0yJxKBlYZF3St8GFeE9PfU51rNie7mYfDbO0zMPT85\nZi61ILl6J8exD8DfxAQQ6xuXf6BpKR6BlAvKlDtn9jeJmPkcjXKsnQRO/sYt\nXExzsbBj5Ut/GMZ5fUXgleZAmISsczKkh5ImOMseIfbMtD2Yhul5MTvRr4hE\ntNzM\r\n=GWTh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQwdZl5o4dLC6LjuflvgGua2GuJN5rEtuGkCPHknZIOAiEA/nNMyW+49qDbOIk4EfJ1tLwbDVsRKbNa3QZ0iEstw/k="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180917204138_1537217016488_0.8795301383716083"},"_hasShrinkwrap":false},"1.0.0-todo-ignore.20180918190425":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-todo-ignore.20180918190425","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.5","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8a75523c6c7cd5fb318c5d2a2895af9f11b9bb8f","_id":"@atomist/sdm-pack-fingerprints@1.0.0-todo-ignore.20180918190425","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-DmgtSaYpNy4eJmelGi51MwPWvvT5d7ye6x4rzaLNopZrVLtSC7/fOUWbVPWhIoDCySdmMivap06ppLy/PZfMMg==","shasum":"636d43983f407d107bab119c68d73b971b250b71","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-todo-ignore.20180918190425.tgz","fileCount":34,"unpackedSize":426042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboUy8CRA9TVsSAnZWagAAaygP/ir13V9zKx9ZcxEStibK\ncqV5u6/f9h+kMCSFOtufQfiWMzCsNKBKZo9Px1YXNZ8+9pEzoTp0hdVqSzg0\nZmtD9pe9lqTM7VGiE1NuyuqZFgjZVXciamLSNbKzEF08O2Skcd8h6S7ikf7x\nYydwkcgqD21/oouXaBN/ePFHWMMxfc1lD7nFYRAI4TSf9+Wsj3mjqZ40G/6m\nnbAHrgVTJTd8kmx1vSBOFDwaqVZygybnOWN+KhNXce/cKygy/ajkkIyKtc1A\nTNybSXKSbeyT+DTi2pmDKz3iGjCM6O8HNzLUnoOOK+3F9mJyetNp1ZRDU7zo\nAMndRfmRQMzB346UpGyVYNeDL9Bg1ZIhiR986/gdyRQy3jaTRtIPF43fAWIk\n2Q9VnvEPk9c7EhjQnL2hf7WK4lEOOuxCMuAgugfl0qyZiC3ULU3e1Hd9HxXU\n2NtDqzXBR/oH8WE1fwNCTOgGEmho7IWvZGkhftu3OmXhD86IxE2usHVLrfFT\n1caooyUdRqoWSwkJi30dgOXOwHA1NCHI6teAoUTnkBMZ5qBdLgQQU713K+1w\nt18peJSVRtbv1wjMzVp7yTHjq4VOGoEaIkKSadeztaIL7TmHECSs9Vt8Gpbr\nRlzHW6HFvr562L+ofVQOSIm8PQemqhZugph1ACMzmNKhC9jJNyJri/JFnuKs\ngZjh\r\n=TlBW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGRI0KT2nwiLXKaZFQXLPgN28nTPEP3b9crkOCZA1xWqAiBVp6Qdb8evon2F044azmoq5nX7B78yVAWvgguICPMxYA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-todo-ignore.20180918190425_1537297595353_0.5006994361976314"},"_hasShrinkwrap":false},"1.0.0-master.20180919044242":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180919044242","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.6","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"26818b117cf9263305f12c157ba30a12a90acea2","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180919044242","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-kxcExolblTcAdzQng6xExGGy82ndi1cDFV9ryZroNnXZDPupywvcGgkz04++HqgtxDSIq0cezBZt1YRu6LdDbA==","shasum":"6e76f67e483f97b4518dd6b5d90f82f54b6d78cd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180919044242.tgz","fileCount":34,"unpackedSize":428182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbodRWCRA9TVsSAnZWagAAynsP/1YguU1fn0+i9djloBJ2\neASKquINB1DTyM7WEgKXVhemOiOrDWQjwrgLL/eBA3ADTErHh5q1mYONaGGN\naJPfaX3fFvAv3+Ypdrez9dm17LJbw8sPucJbs5Ib/WsXv4NR7bnUuZTr+w+7\nunlpSv1U9TP1eA0ibcj9Utdqvls6W/PTSil9mCEgC6KPh/buuN4mZXLnjR51\ncPTMz1NZTDMfHkGpk0AIGtlUHFsrxqBQbnZ5SSZeooeVTm8pSB4qDEfa9fqD\nakmXkUTsze1xWTv+LiypPB5D/dn3CcEhCAfC7gH9oIDrfKtMK2Cu1kvpWNQW\nV2Mtz6JV7TxDaDjXEYB2b9nzCzgzmaH8iSMnSfuh1nDxg7Zgg9xNyvKHa5gK\naQuywCrZ+Cnv/45houPnN6flnh5oyxDJC5g388zd9bw3p0v9axqeRJZ9ilV/\nGxC2m3rS0Lil7i44nQ3p/6FRX9U7IhFO1zKPmVMoDwcgHKPSfnyI0hcnoQt7\niQStdBY2bLafNJjAKjA/cRPWvGtA7ZZHQF7cC7cL9lThQ4msH822UUwOeikm\n5ekJtOe94xBvsAAciVZw+cLG2NKau0CJ3S7UC+uEQdtn2S1Z/NzzNejto1dO\nCrwqMykFWkNwkSm3I65Uq+ecUnFCprD2w9mC8A8o+4fewUl1jLagN3Lpe+8i\nm6Vq\r\n=hi2L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSA2CuJGi7e7o+zsIy8ikZG0hq8lnMwHzmvLZqv82jtAiAsSG2ly3Bi+wvkKXU7ucqvD++eWvrbgUmzNytnWpfXVA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180919044242_1537332310170_0.9404436237458491"},"_hasShrinkwrap":false},"1.0.0-master.20180919053125":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180919053125","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.6","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c1c791a778c644aafed0f11dec37f1fcea70805d","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180919053125","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-rdnMJDv9IoYTHeiphNWrwIZa7S0O6NddhAIwlzHxJ2kMlgePA8OC5rb0chBU74F6rRUiBDLUAQdm52oua0iWGQ==","shasum":"e7d0a2165a88810f802e4da25f80d2e02ef785ce","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180919053125.tgz","fileCount":34,"unpackedSize":428451,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbod/HCRA9TVsSAnZWagAAzwYP/3qL+YiUKxVMqfpCy6uB\nKaZwFrFq6sYz732h1+jm9+r1+yGyfzA1x8dpGjvPa3UtesmTWxzPnm9EI381\nOOwJhgoBEtwcwx4irTNTQMJ4RHIPTUj5y+g23A2PUNrVFJwrZJ+2JM/pCcl7\nC3sHPOKUZSU7uFEaPM+uRt3nTAVMLJHDbvFNXq2aBu7nMnWiJmq09JRWSA/g\nFSp9VORD7A0/44jXK1Mt5Q5juAk+/r60TdtsEbOGKiKHZQNkZ9KXQ11rpMNv\nDldQOb1RBXP/w1quU1dPXWuuRPBx7FKQ+AzIUbBtJh2sYNfexWNj08jX1fb7\na0a5+18h/LiFHM9+kFXN3f0EsducoujyYb7AONAPXB7jutvj19N4SG65mWlm\nD+DsvJyKcoPYTvcK+78KpcBTixtXAVhftth9bVAuQPP29EvIb5Z73zhob8Gn\nVSzrEuEbA5IPXVyRMpS2n2UazZAOwTj8ydUvlsgjZJZgesIyr3tMafoN6Nkm\nINbZrUE4QD2bIvGblBMfxT/nGeAOd4vRZEczg0i50qJZeA2t2UIhIY/it5/O\nXDLtefJxG3lzlpjRrJypzphTINnKDgVvFjR2dTNrePOIxLdsezyQPfnw2ZmF\nqPEDZH5UVU3yajYlXy1pbmYzGBMA8y/gDem82NRqGnmQt54vG84Ea9VamV86\nMGm6\r\n=TEM0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzbFoF6i2nLSanhe2d7lgo9mKPToecBFWuBObfvx8j/gIgSmhe2sGVQAP5YbRwxbnuBa4zJmBzWS3eqVP052hBnTk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180919053125_1537335238857_0.241856408558621"},"_hasShrinkwrap":false},"1.0.0-master.20180920051115":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180920051115","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"32154778b0987259ae1b8f9ba0f6e27d551a6710","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180920051115","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-NjVV43r1ZUZkSud+/QHgRimJhG/K6f83zm2LR4OG0WslAiihBVG50gYLcipZMpRLSnD6vcgmNRpsemslmAfLeA==","shasum":"96f0b23fa75528484abb373b9797a4295f1a9978","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180920051115.tgz","fileCount":34,"unpackedSize":431555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboyxxCRA9TVsSAnZWagAAAJEP/3rqI3nsO23sFbBh0Y9G\nIkwgKxAR5K7bgn2iFMF6TZf/PUnEO4cGj+Ma5N2dJYJKN5hAE8z4EladIt0w\nGCYfUNuClHpn/vwJu49YxcRmyyM7LY29xjirRtq7VC6+Ei0rtLrP4b4GP1vE\nkQLEzp2HpHly6W4Y7n5k0agC2IxBC/X1eFwWpkIzd8jY/oCWsaxoEqLjBr1Q\nMS9Vv8aCPgWbFC9SBswjOkCsSpfeZxBjw2I7JGX6WVma5LsShqQ2DP5JquOn\n1gJkP8TCEbGnm+LDnp4pW345QxfqYn7LpxMbZzuEzjyMeiREB2alqZUXm3d9\nxlluxoNeCL1RAK65WlbdEzmW90HwuYn7kuCiFR+Zkaz61QSW3nnIScrvvT8J\nfK4EKcfonUCPn34IJrOqyaUmrQu3EDjICAonnRYZy5YwfimBPpC7Kfm5h89Z\nqcTQ23aomOhZpKrhJps7r7sbnBIJemeEW3tNiP5l0nLaqKI95Gyf14sZ8Cha\n3qeyiW8nq4ZeF3QP3yMQ89P37YXs0wjydv+ZC6T6Qf0A5d3THUwVEYgTxtu9\nyBJPk2fFnwGrMoRul0BU5X5f4IW0jplbVjTQTttuTc6MLq0CyST21vkYNhV5\nWNSH/rqIBuwtudsAShfbbiE4zytj6mgGKgRmjttdzsBtZYxou2Wayfpoh+DY\nwZ7Y\r\n=/0ha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFX6L/yS8xTvzr9341I0FnrZOtkUdKS5KoMW6tR5W3jtAiEAmZd5SJ4epOEujNPnLx9isUn2XV4MraowcGt1EmuSJgA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180920051115_1537420400869_0.41814726900232735"},"_hasShrinkwrap":false},"1.0.0-master.20180920210545":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180920210545","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.4","@atomist/sdm":"1.0.0-M.4","@atomist/sdm-core":"1.0.0-M.4","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"733cf16e1c08eb09e89d6c01651b8fb15c15a064","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180920210545","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-DIXtip/tvHPvdwioWdi897y95jsECvRWcsvzyYFcloSQyUhbIMpjNPfYMVmCun18lCAdxmuYzv31xsw58Q5Q6Q==","shasum":"b86a96ce8dc4a7543b268b9a30e3d9fd6491801b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180920210545.tgz","fileCount":34,"unpackedSize":432205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbpAxdCRA9TVsSAnZWagAAhQEP/R1S8T8sxCNkepjoTsGf\nx7eMoCk59HCkdYn8JPfXpMoDTlBCmw2PJ/UErcUbmxs3mOs8LoH6C9tZINS0\nZV6ZjhJAGRnFZwEO0ZOzYD8DEJdRfLl8VJeGcwQk8S01bnFLVfL0qY5jIiEJ\nwJUX4wtX8z9SNeKQVFL4kQoFu1LwYsiEyHbELC9jGG1n5DjWMVE3Bx+Z8UsC\nOhyP/q7LmTHPwnC0/A68X+vnv+aMzY4Y0HnEtPvff3HdCUeYJ9f+RuHu7nmv\nS2HmTHk793HnwNnBBl8FqTExpmJxtrUFNDJSEOXfAU9bQ7y+5eqcK7Fn6svt\ngSBf/Bs7kkoU074Ngc1hW0LMDQ73xgySlINQ8CdUKtu8X+DL9lXCDuUOG8a7\nA/bMlsMYvhVBxfTT1gk9ftgEGr2FCKAvm4NMZiT/v6+OovhflJoplKFB3VPQ\n27Kb/rSG0QDb1DHnWwFxU02M4dgY+jLO9mrPqx6AkT7Vphcrjbr9I3oNQ6q8\ngGhIUq4YcsRJQgUWIU4hNL+cfSl1/B6KQqAKk10MPOJtL57QFpd1HmJ7KQ2P\n3mqXPS1iIIA3L4njjhp8VoLKNLtvrUK20a9FR52NShtdeq+nzV5AG5kVtc1t\nbmt0PcJnlKxv4WWWbkIS+hS0lUcZz7ZouIKjkprH9AmTWcZ2R3DgjgqLqM4V\n1bLA\r\n=JsuO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAeVKpQb4kTCC3IesQMc0uMVmibjYixAilrRWVFBNn8UAiB0nXodOnrBu1nipOuz0yPa+DSM7aC+tuHMULWm1Rg1/A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180920210545_1537477724863_0.59305551197009"},"_hasShrinkwrap":false},"1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.5","@atomist/sdm":"1.0.0-M.5","@atomist/sdm-core":"1.0.0-M.5","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"a16b4caf3fc81fb254b5cb471e346805e8713c30","_id":"@atomist/sdm-pack-fingerprints@1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-odV+Nd8ukwhPfDc4dn2U58caUDae+A6Fzkj4fmsqu+Hm73KPFyPDHiULt8nB74qrALT0drjd6umKuqNioQbYzg==","shasum":"18b39d1b3b7477a051977f69c283dac0ee5f6622","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706.tgz","fileCount":34,"unpackedSize":432352,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq/XpCRA9TVsSAnZWagAAg98P/0zU7JM3h5xRVui7HgTR\nn0e64ausW+wQBhz12tZOwDtLEC3nd4goYUXcVTUQXpSW/cccDLr57bYF57pI\nhig4Ps/Jkv/ZiBZlHFooLFDySN4etN3yeH+FdM9YJ1bmQIEsfrLTvk028AYf\nHXvZCm04lN/MsqEBr4M0pyJcUhp4e7Zg6SMmsN9mdaFCqy/LxEBDmYdaijhE\nioDG7OCmKY2iY9FL4mB0HD+tO8jOliSD5Venn7ZI/HxP6YRE8byf5AYnq2/d\nlu/9hFTLaRAr1qtfWsedyxiG7B7qw+5rhsXSSyynEHpO7o4DTxnTiEfS+O58\npCarl7WCaiBmCCTVe/GWshPasE5XR3FQKKffcCwQNlUQSKnw1vecQ2Wz5+6X\n3gKw2nE+BfNX/3eEom0WNCZBx0NWVCTkpbKAH8D57MjzXps9BUAf/fjNFhrv\nIlZ8HfwXpkUtUvTMVkExYls2yjQpcdEkgVWY3Z727UEBSomXALm3VvAdz+FY\nFPX5EDuUwolnGrzZw+Qg1mGkZh85dCDswdWuT7l3KIzjDK2UMtw24l8VDuYo\nSHcThS4jCehsDI/leJVy9bBi/wrLnJVzEz9MOLg+06sVwwyVeJIZVIgpgc7J\n4aBcCM8VziZcNXwTk/99R0pwi0o4xfKI+SX4sLuKfxSNH43ygVAtFlOec8NU\nkXRw\r\n=d6oB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCptBHJ/Jmqya/LB1pSW5+eB774hNcMwRX1RP58ZBdZ9gIhAKVu4sLS5hKJyhchfiyysV/LpUXlAxTKTF0I4MB5Ki78"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706_1537996264318_0.29129256014239413"},"_hasShrinkwrap":false},"1.0.0-master.20180926211220":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20180926211220","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.5","@atomist/sdm":"1.0.0-M.5","@atomist/sdm-core":"1.0.0-M.5","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4213af25ce06f6705664285f67eec4561b20990a","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20180926211220","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-xJ3qsuZRQHRIhw+n95gxzn3YMTF0aSBPLSgS73Mm988Cq2T/OQzGi3ceE1vPcyjU43wChX/6muBVE5lQnR1ZSA==","shasum":"58fa19c65a058001d94eba59c5cca21df5954dd0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20180926211220.tgz","fileCount":34,"unpackedSize":432597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq/bCCRA9TVsSAnZWagAAN70P/23thYaSR5/7jp+3erRn\nR1dHJ1dd9X1874+ZeSypl2Cl54YfmoCxNUnc2oOGJtFmv/KtWLy5xqwGBkLl\nHw2Jej0CKYXWC1BwtpJBorqmJySm0EwHM/0QtRCNyuUmyxjekpjDYLeJOysM\nWxp0gcx230j6ixcTD/V/+J9zMwGw8gxYFjrVB5+Jz+YrfRv2CUNCZPlGV0x9\nEPF8mZbbmmVJEhYMDvqxuJh5Evw9OmNNw/hqzRbpeIez0IODugmfaTNWt1OV\nUPRnRaYdQvZqxGvA7JB0uNfYjDXCIrtYSsbPghtOxgaT9EXZWf2aidqt5Ud8\nux1lp+IkPQMlLQhkrOP7hw1wGyCULpeRbODLRo8oZf8fuhYU3iBAe9YYV8oJ\nXaYgU0TSMv/XXpzs3pT3Okl4sZdeJTRhX7DYL1Lg1QNi4bpz8DTg84nXKJ+E\ncxqbWQm+G6L0KXJeeI9oGKhrpO64wb4a7PsfPrgiMPkDINn/kRoHJJaqfSft\nRbhj+G4nFYWdZGE++EZqmuOTg8MhLzQ7my43FCxsojgXQGUZWeDKiPv+P1G8\nmrr5qeXjPNjDSok82+RPfm4sZsEoSs+VnA4Iq0VAd0Bj4DrjfLq+z3e5GvdV\nyq3ENuz97MTxV26B939DtA3pe/7KWvdMxi1wvgIBsrKqDeyPmbwpcb9E0z8O\nPT1S\r\n=nj6T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIyiVuiteTYawm4RE8WzKryWI3fUNkbxo5OPl9faBIoQIhAMMDbxQ0g68PIrqwyiQU37bLW5QvDHR50tx2x7Hm8eIG"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20180926211220_1537996481755_0.0023764395790037973"},"_hasShrinkwrap":false},"1.0.0-M.5":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-M.5","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.5","@atomist/sdm":"1.0.0-M.5","@atomist/sdm-core":"1.0.0-M.5","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"4213af25ce06f6705664285f67eec4561b20990a","_id":"@atomist/sdm-pack-fingerprints@1.0.0-M.5","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-bmHE3VlHnFty8VoaPH4AHJ1fwWxuZJhrqdXEmxDBBeRbs/+17zqdQyP/3RH4UC/PPc+ZHaMcsNxoHPi4p6tEUQ==","shasum":"464e3763812840856139e17c136d71cbd44023fe","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-M.5.tgz","fileCount":34,"unpackedSize":432579,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq//QCRA9TVsSAnZWagAArEMQAJ1jSp8uBXosWNZCYK+z\nkzThN4TK2a8NgkTAgFDipPwllLG6gpco3TV4tzjFzcOguuKYYz9JRQiQ6uQH\nUIylEfq+sN7a9lJf3AzCwuc8QLB07um9Uq+TXlPcGagK7dMWL4WCG1R2jw/f\nr59u+mpPhLBZLfXVmdycJPXxzHNQYEktwZ7Eq8lZQW7MdGxNtuBRrkHshTLF\ngGhS2l/7Kghh8dwH4TnJnP1KzwqWNzSnOE8wk3TSfa8bz/pyPBGoaDBr9uH7\ntygvRWDLlZk57cCt1kZuA1gNUjLiaS2pTq5qnDtSgy8KEW5Q2yX/L890GP9u\nLMvEPYxpvy19Wc6LEFDS3E5cxhr8USRb9NbNLmeHZKez583u5qQ22+pMjzPG\nWUhb5VcC/s2C6mkG4iH+maHIF6PmqOx39WWhFgxVPl4tra1ou+holwT+Q6od\nBqnoe/mYdJ2I9YbLEbjWooPUoyKxkTOzDqOupqWvd1UchuhlHR41ulDI38b2\n+tIn5zd9G+aI2gjP6XNf3PCbHo4RfJscYi6owcjPNepH+heFCXnTA/fNOCi0\nGAuXiqld7l5wOWfYHpu/VDrpIdC/qgKAqEiJHxBPoqNdbCjzeEm3y/GayCcl\n/7jLeZPRMrCvkBBIaHXCSjAoexHEndVMY/zgdVZkJiOw1T6n2RGNtab18GoN\nImcx\r\n=5OiD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7sqvPbHhm6bdLARINGdluUq71tDcsE+qdOtlcX70ryAiEAmtPl3vE4jHR0Wi8x4eTWWO2A110gR2Hg44JydzVJ0o0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-M.5_1537998799571_0.7427577700304213"},"_hasShrinkwrap":false},"1.0.0-master.20181008215050":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20181008215050","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.5","@atomist/sdm":"1.0.0-M.5","@atomist/sdm-core":"1.0.0-M.5","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b869085447550a586e64f5d9d072866c4ac12e3a","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20181008215050","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-6XhTIPNquuamLawN+yfX9vrsLKKPtxfX+3ZHhtXiHiyzP5XptmSt6iU0RERwEV70V3Ku0j5Dt+seuXWJTBxGZw==","shasum":"2821e3c451352920232023d851eb01e89d8a5af1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20181008215050.tgz","fileCount":34,"unpackedSize":434135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbu9GvCRA9TVsSAnZWagAA2qUP/3+hnndejcjBbxMB+Sr/\nobF9En2Wz7LKZQlJqLTCcsOrkwr0/vGbzO+JlGGzV4hcyqQCHKS02xHR70T7\nt2cSHsnCs+xSZTc/xuHqUN0iNuPf69wwVTANwauZuO1tafoJCZ0B6qe64SK9\nYZwV4aWhjnL/RGnXs9PqK5rQvD8JjVfwcyywW9B1+wE8zR76ayJySZUBFRM1\nwO9eVZFt2PrCbXcd1FDVJ7DxJSLbmB6E7xWRbCH/sxI/FY/xfxth7e7FGd7W\n6Faon/Ef4TY38sbhy8Qb+qBliAU4DE0ak78SEd4a1AGNMz4Ce22S/BYJ/6Zn\njDfacV/A0CltBFIUY5Ys2EzvoJThjlAAmmCkmOezzHnX/gkCce25a4O8pajs\nfoN5JYlCQAtuTFWoYkB872aQzzs92tzqnAwY8NrW6f0Ih0eugXs2+OE3LQ9k\n7jKWFbR+eoQqnF2iHTsCY4k0O7iIMFCVeBRidyT35D1fcY+tr76mf64Qdjl4\n7JgUQbGtoiKVL4F+fKLNd0cbMA2hMd6jI44I0+QD1KRk28/faO+7Q7o6Ky/t\n4DTpD6/94cVitWP33Iyvdb7mNFG5MT8f4izng5M5l2UH4V5oYbL9Ch0LUZmI\nR6TcSqb5Mu574xA+6whFo8Hjnc3rqA0N49iwKCt5b5g5g09K+hNFiEUhWITt\nOS/9\r\n=Lwll\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjzI4/TgIK36J124SiUjkJH3eQUx+2d+Zf5XfvU/HyyAiEAgd/D5GPqk5d6hgx17AFRWX6q/JpQc6RnAYCv2tunwAg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20181008215050_1539035566933_0.4987688937292518"},"_hasShrinkwrap":false},"1.0.0-master.20181009025911":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20181009025911","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-M.5","@atomist/sdm":"1.0.0-M.5","@atomist/sdm-core":"1.0.0-M.5","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"cad270acf0829dae524f74c8b5fe6e3461d0a9ce","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20181009025911","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-W9MB1pNyKAvSggzEfWf8ZE8qBQyJOaD3dJ/BK/rBKP1Y2aEmvx+XGUzLUbVh0xJ763mqda+8cKdhbbsJDiGMxA==","shasum":"5b119247d399d24483613dd5a4a866566f503b07","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20181009025911.tgz","fileCount":35,"unpackedSize":4023689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvBn8CRA9TVsSAnZWagAA0sgQAKRBucCGjrJd0L1xfpzN\n3XrJlhG9UrKTOu7gHqFymDlyUhSjqSgu4YwRE4vleaADTz9iWZwzD05IjOwV\nPBLy5Y7TfVyA0gM/cguWIsuwEN13mDH7aixqsUMG7gPsWU9MrBbJl0OWMixB\nBZG7vPCAy/qlceBlSEIJzV4ASdxa+g0/JVkvZTxibjwEthHtR4LTnelb+Gsw\nALOL65pR6VToJfnKEmI8KZm4HxVDBaY0mq8QzYR7mCwrq7kBcJrztb2al1U8\nD4JA0bfRZa6lqJ3a5IIKiNQTqyIw/wGz8fw5n7hb9sqmWSvCSLZiMLJAREnQ\nFUL7eGF8gehGiNWZ1DIIG0cwyN2HimU0nrqxj1d97pGxtb4/R01qcmmDO9vA\nbqzk5nkseB1DXN5jObQ4Mmk7pigCRjLY0Q6QZiM+XA+pFZapgdWidjaVePnq\nWmx/BHlR7BUAeiRDlJVhZ/Yv6EHaMMoLSqQ9BspsufRA2TdVXtIBg6I5i9sa\n9P8W0PkTjldezMiGUnuqklec1/fIdL/uFX2Pxy18vWn0ZScqWsMqoKc6wGzJ\nAme1NrTzxypIy/D0PlCLkH7l+pQXioJdprlAHgEFWCm6E9499iKecN51ZRwb\nZ1pFhn4Jazgclg6L2LosTT4YgulnCfaDlWB0CVpXtE6i0F8ISXSTvO/sYnG6\nTv4c\r\n=83L8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmsPfelF57uSJ+FLdT66EheoBlCKJbUQ4p2FaNfE6x7AIgM5isTrcUlHg4ATV3XcbHSPR1sY3NkKS/iUu+GzZEEoE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20181009025911_1539054075346_0.637902725023491"},"_hasShrinkwrap":false},"1.0.0-master.20181010130129":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20181010130129","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.5.7","@atomist/slack-messages":"1.0.0","lodash":"^4.17.10"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010081045","@atomist/sdm":"1.0.0-master.20181010085046","@atomist/sdm-core":"1.0.0-master.20181010082939","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile":"npm-run-all gql:gen compile:ts","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","compile:ts":"tsc --project .","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"eebd348510287369fbd43103f6801c14d1608fe2","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20181010130129","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-V5O0qsYg5qYoasxXTFuNQdIq/4vvoFMiWpcaQJJcaHonC0XrL4ZpY8UdoAftI3PdXpbuAz/Yg49moN/lU9AmYQ==","shasum":"ec64e443efcae0964641a55d1f3776ebad9f780c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20181010130129.tgz","fileCount":35,"unpackedSize":4023932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvfjFCRA9TVsSAnZWagAAikcQAKD5ASBXT6H3RixsqYsI\nFt+WD1dbI86Ckd9++3WdhYUMm6uMQNIEVulKfXtkGIJg2Z88DfndNoT5bxhu\nUoRYlJVywN8cCrWWXAcysMyBV6crbCisfBe9IzbYfw5O6KX1khMR7ygwTI+M\n+Jhhf/NtsouNB+hyRK72eK6PKvnQ4CUpukBAGEoXCN1r/Za2RAowAwCCrciZ\nwrj0WCGiQfcBnpUbOFXTKHRT1Dr63ZTGUY3fJ1ZFOrsb/BCJScU0HJ8koy+U\n6ha+uMAZyW4/O5drrUD+JVL1wDI6WYs/Yy7N+CwfZRTD0ZMDj/2nBWiHphpX\n7w4Ur1x1q5f1Ppeful7KbEWvINvjCJzOfAkDLBFZvrjQ8vHe6iVfGIadGXfm\nPpEpjLvtWsBgqF9Wxe9IdydM7Vr1dHJC4/xt5alYqS8zTRZt/RCiYMZn9G2Q\nxND2R0KC+PtpP/+RWL+ofW4XfdqrADIldVMvM/qu+kE0MsND0/pK6+leNHNR\n6+oL1DpiEjrUd4jnqLJXB5ZegixgLHSIR7G9Ewo3Qhs3QuVNCp4XDok+IVe6\nENjlfskIURTaQsiGMlqqDMw6/g6m+vPHlDwGxc5UP2X+sfErG3F2YKSUY+sM\njjc7NT2LvHEcZpl7LznzoyO6knQwwbTDdbeMdO9wbJTcz1T2nexVD8qhc9Jx\nW3Q9\r\n=TE5S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyrSkFW1K2Xye+EuWnoMbVxiMTctdqFwLpLLSH2jTNkAIgZoWLnptjcQAG8NcjhOr+zBAVfTgocSp0gqWNBCjd0PU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20181010130129_1539176644388_0.12055007969539"},"_hasShrinkwrap":false},"1.1.0":{"name":"@atomist/sdm-pack-fingerprints","version":"1.1.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.0","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010081045","@atomist/sdm":"1.0.0-master.20181010085046","@atomist/sdm-core":"1.0.0-master.20181010082939","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"f55e15efc509cbc2e63b5af59aa9a464acbc02d1","_id":"@atomist/sdm-pack-fingerprints@1.1.0","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-EWR+CPUoOLV7+emj/vjJEzhjQz2UBRBnBJFI+Eb6KC0Wu5gwjjMWZszJcJEugKy6HO1QgXEZtsIRNn0MFSRxnA==","shasum":"d29a257eb1130fc22d4210f78ee705951160fa2e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.1.0.tgz","fileCount":36,"unpackedSize":8293568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwAo3CRA9TVsSAnZWagAAx9sP/jLb8/ncuk9O/oVLZvbg\nJYxjaaSF7AujYA2b8BfmeJd4QDeOdL3lOHakvruxAMEybju0vOLOsV58sP39\nTZt1pI6kyzhZyvSR4Qmp9rdh1nh51se21KdWJd3dHabgsfJM7waPCbTveiMt\nJvGDQ+wzZVz79rzUoMzU/J1mPevhcwjqZePZfpWySAmpUCLCqi/+n6BoXpOw\nqdS8NqjXTcMAzfx2StlKPabDZEknpDoAvTESHl5kGdE4FLeS950Ne+0J2ip3\niqrwn1NDF47cdk/EYkhrQL/37BFx01fW8rmlM1A7PURWdSjpD+9H5e6s7yk/\nkZvISNhVuZoRV3Xmwmp8qojH9uWdBAujosbO9b/ZzfR5ykl27P37PFxjZUT4\nZsEQRWlpKGNXnwCg95+LjxksK6VRi2hZC9g6CYzYw4a6VUe0fLiT8NV062vg\nm1wAjm+yzA8EhclzqdGQRIfZJIdxOs6m9dHbTk7yl/gdp5vxIyFl/TtTbfSA\ndSqjZht5FuVkCKNbbrnUhtZefNpbZhBhPdVOLaFMyrMan9rVI+fWQbTbe64P\nkMP2SnZ+u5xsyFU0auLR0G4um1tcM6Ej2RaSQaB9YvELrpfr7/nINy1fJgUm\nDSmG3od9E/TMe4ofs06kzjw/Nt0HP089E6xqxWiYznMvPOIgwzeSj39Fbb7w\nZecD\r\n=3OYQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwk5pEytzJzPTE+eJTI9qjzwsANB88xNm6iu978OzdCAiBijdm2gV1PPaUhyN9YB5j1sL3Se1OggJFg6cyRmPXlYw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.1.0_1539312182390_0.04319898754180573"},"_hasShrinkwrap":false},"1.0.0-master.20181012053810":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20181012053810","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.0","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010081045","@atomist/sdm":"1.0.0-master.20181010085046","@atomist/sdm-core":"1.0.0-master.20181010082939","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"362375771593e8a6712bf6735c0f28168b6867f0","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20181012053810","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-fu+Zm6NYsYcUSmMLQJUt17ruvA1kf8DMZarhi7mvucjLlCxzOZCWaIdCRYSYMcWviDDQ7tTUDRVpxouvIOsjPg==","shasum":"af721c6ca2b7d36ed6413a23249ead1973d532ac","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20181012053810.tgz","fileCount":32,"unpackedSize":8013027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwDOqCRA9TVsSAnZWagAAkJkP/3zgijc+Isk8L9qIMFy2\nBruVUoyXa0bhaiYWuo02rICHgWlG8qHHAy4N6cvS1vi9Kq3kf+b8NNHyqY57\neG8sJrCmfP6UD9a8UBpbUBI63OncFpKGYqcl1JGmCDD8J/oNvNR/1YRZpmsK\nYAC3ijCvChoVE40G/M0JH0Ame0SOec98+hbKBzVKv3uOKhogvFkfY4uB4ovq\nndKPRxnfBPicF7YaMeuWVtNrSSZaxOBXHRN9+fXg39gbFojoRlEhubi5pBGj\n08hICR0q+QGEwtaIp1fezRkyLefaiklVEPmrAjee2ITLc1cdI6QyY8fnH8GL\nbm5wAfLypcwINK6pnwLorNk8dK8EB7ibBTXTJzhY4ycj6fsIAy+/UfUH15nN\n1j817bvkEGSBO1WPsyKirvj5vKua7GZ3qiuyHFmxCu77/S+mDpk3xEIJ0LYl\nWrYYsGXHI4Nc+A95nQddzlBPLj/GVnk9xNeFRVHXwfUzP7sSK2fooNmfZ5Nt\nQ/rowZM7Z0CA+XogQbaOmy0EsNcTha4Ee/r9eLpUKwpvtdZU8sSGKPPxmx2h\nvJC9s7PHmVLag3RZQJw0vttkzkuYhN6ZIrxoMH0KHDRoZ1oAY6dZqQDqW6oZ\nBh+Vu8kaM876ODeBKGoC1L8jTwwW2OwUrs91t9gWnuE0ASVAduxkyq7sX4yz\nv0Xe\r\n=jDIW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgTjok964ezsuYOSXtx1Bh9LnBAQgGcBDVPy7B7cXnGQIhAOxXblZ0qpQyBOyXcymaDULp52XcBWMJPzvwne8w/JJ1"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20181012053810_1539322793508_0.9206044846126962"},"_hasShrinkwrap":false},"1.0.0-atomist-update-branch-master-1539326909182.20181012064944":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-atomist-update-branch-master-1539326909182.20181012064944","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010204819","@atomist/sdm":"1.0.0-master.20181010145707","@atomist/sdm-core":"1.0.0-master.20181011053254","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"14e1da98468175b8f44c04dedbf7141d9c4023a4","_id":"@atomist/sdm-pack-fingerprints@1.0.0-atomist-update-branch-master-1539326909182.20181012064944","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-3fwZbA5dQML2MCEE4vY+FyPp6y67qOVOqnD5ZjXO6tLsBEuluyzGDFiPesoSDCol5FGzDQgiS6L2vcGcKh+WFw==","shasum":"4833049a55148d57b826e1b9808f322cf9d362c8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-atomist-update-branch-master-1539326909182.20181012064944.tgz","fileCount":32,"unpackedSize":8013085,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwER5CRA9TVsSAnZWagAAplAP/jBnm0KKvNlM/XZfhS89\nTvEOdfb692UEkIIdHvLogEVSFIkpsR7imkZHfDCArRLTnSJq7D78kbpgWUfW\nztKryrufI5DrVg8CkspjAiTbQNRUygi1NDdRa0EDW2Wb5DbyUlxYV01T7OL6\nveW3wR8OUkHibNCcdTGd2PWm6Im6rfdouGJBnKpyvowXZN5/Ffr0SNZR5nyf\nzQg88pAvcKd7cTPCBKCBXlvtOLiUFnQMy0WKvMxkXH/LeTYPnLOvXApn7OXM\ni8pS/pQPxYXiGbQs3oOgcoRxIkeUctGGBPivtVOB/dnRszWpEfFiZsjptjzs\nl4IWLCAsGGxGZ7TXs1wH21W7ZRKSlpKd2zaR2LrfNGbM2aiL+/5pBS5ab6Us\nOkf+H4EOllWWZeHvJbcafnovw6zaepvkMFl7o+Z0jUImB19RpTiQkIzchxWo\nTSn2A4Vxriyzwb7teHM2HU3biJLJzP6ziaqWSNNuorasIVC+50e/2rDpLzhg\nrQQxdYclejNvkD7SEeOq1B0cZKsia0bE+VPoQbVjZR4kcx1+ztn7yUcMBbO2\nla2TMw8bchMuiXgDCDFLYhOlAhaWAdQ5MCsSvgPMgr/RLjjUMKPTi090omHf\nAWMCInMzNhhRtiuOpiTG15269xVWj9RcDSR8fhqcjOKMzslNB/ddc1rXQits\nml0e\r\n=3OfA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJgByNS1cV5Ie6069c7of1jJsjjCMv3lHvEMA2y3QvpwIgOMgBudp8mZ2guH95vnlxgxa6Yi5jxOg4DJGxp7Sx1hM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-atomist-update-branch-master-1539326909182.20181012064944_1539327096901_0.049087552678746205"},"_hasShrinkwrap":false},"1.0.0-master.20181012065434":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-master.20181012065434","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010204819","@atomist/sdm":"1.0.0-master.20181010145707","@atomist/sdm-core":"1.0.0-master.20181011053254","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c0cb8c6df89fd47d24ec0a9ca883647b39204ffe","_id":"@atomist/sdm-pack-fingerprints@1.0.0-master.20181012065434","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-1WnRbTo/+VTR8cjx7z00BCwwXZJFaYRtQct7GU6f8b8SXtyyU46lkRsqtphps6vXwCHtb/yueurre6khl2StNQ==","shasum":"9129aa6dcf3b07b240ff75b8e000092d0e976af0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-master.20181012065434.tgz","fileCount":32,"unpackedSize":8012375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwEWXCRA9TVsSAnZWagAANYcP/17OG4rSSIyqLCZcSON/\naiLZq/H2/xMm1X2ke0IFK2WEQnHjBhRX1BP1hOjWB7lpnJ01r0YN2v6ZNfn3\nvoRHeusRg+xKbZHhTPhoNpbel9cfp20iy+8TOX6WMK5kOhFva6WdCGM1y9Ki\nwcdKHvPd7hK9ZMMIHw8PKGRSaerY3BEmZ39rLROZxEl6DbfZKCgQCh3lCgfP\nb8hrVxHlv1610oqNzH8WA0roIgoYNrWpHDIMg5PGWpBywdHWnIWjaSnge339\nzytUkkvAtfJss7PjiZ8T8IeAxc/6rPV/uSeuDhbFV3kFXnxcfUBmpdN7O1/m\nGrogKXSw/2BsMtEJojmJvuj8fjBFteJWzPeviU2AMDHxtKqUN1ltHjSwzhVA\nISRmJjoKubmdn9cGxmtQGg4LwroBvNbSyo65fYFoKRnVi1JiktBqolFy7/wM\nT6urbzesapyOfMWP5VfO395QdUBc7nbVxAlr+lW9yChHeDfp2UOPHPuhPb/x\nBVzCtDVowcAttm7mPHrkUnB6YQWBTt63rtVkNLAFgO+Ae3BQi8KSgpfxJmbm\nOAF00kY2GoLGHx0p8qbNL/ZfbI7DdA47QqepM+MT2qo3g/D/rTD5xauTG0H5\nClP02JRN9t3CS2Q3YQ0WCy9KQ3QelDl7AYjozUm/qFksrfzHPd7Wn8+PmzFF\n+wRo\r\n=Zg4c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPGn92ugB8vmFEKGEVm+vxUcriGXGRYo3p3zp1bjOgWAiAKIxi164XWzJCbAmbM+XpZzchOVSxGZnIh7gFtZV54OA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-master.20181012065434_1539327383156_0.15017038792348747"},"_hasShrinkwrap":false},"1.1.1":{"name":"@atomist/sdm-pack-fingerprints","version":"1.1.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010204819","@atomist/sdm":"1.0.0-master.20181010145707","@atomist/sdm-core":"1.0.0-master.20181011053254","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"929daee450a22648c86998c7268189f0d267b588","_id":"@atomist/sdm-pack-fingerprints@1.1.1","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-I2rEhpnqcKDvZEQWQH4iDmTXAICqnflwqIAAF9m71bzgosUW8KZcz8Hk++/HvXn02Vq27f/Urqs8U41ToYaC1A==","shasum":"0257a38cf143e47275508fdfabfcc4b6f1b1d323","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.1.1.tgz","fileCount":36,"unpackedSize":8293171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwR6XCRA9TVsSAnZWagAAkP8P/17GVwvRXGncUZqLkW/V\nqRZhwA2O4ndtnazyYgKyTAM+AtGSzJY27kPDPt/wdK8lWcAM0WG4GTFMtHmp\nsV7h5v+sqTt41+EPyR94nsNszh2ncKVDRqrQQ6wBgZKwXy0LcUV/IuyHrm6a\nExGjuAT0xfQEmg6k4EDYR4rPawkTT7ghCg6x22rn9GfhUF1n4apQ95rgbrCl\nwJFwg4iyNCBtsfskNLyOYAkajS997Jh39M0gLlDfWU+AhLLsoNXaqqqBE4yK\nTX9psmrsE4FyIS4dRRU5cnkRWv7HVoG2KaIavwnK7UOf7Wfi3DiMZE/oa/aq\nmCmyDCtCgmRahVbMInEg6Xpf8tTiGfg2+SOstGjCuZAn3v1Ng275bDEjjx0X\nFAWE7VQ0RG6EnCPq4etFIqKr2O+KtKSKIYpbdJ3QdBC1a9NnzElK13r7CIKi\ndSOdQ7bKgzc1U3Dd9vzKLWJwfG2sInhFQVv5Y7T5FoqwqJLrHN1/Yd3srKFA\nK4BE1Yf8MTlNytEhakkSDUNwWbLuVxdX5R/hNO7s/k9Xr2ceMTTuH7XDEO6s\ndkyclz+b8y5mFHqMdFj5KIV2wVx50e8nxYeQN8QUr0RD4Ne/A/0rSco/mmNb\nDZCMNFsIqoomVYQPd5FQfXZcrL3+mhBeq6QJ3kSTUXT3hAyZ+2WLcfZhR4NO\nRsKn\r\n=SJCF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZdfEhrRTiD2OlP/SaLLdEGBzvtVJCQh/LJ+Y47BcUOAIhAKl6d9Psx343DD70R7kJrprx3Vfrel8u1NOZ4uKYhtYS"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.1.1_1539382934710_0.8188322949387872"},"_hasShrinkwrap":false},"1.1.1-master.20181012222345":{"name":"@atomist/sdm-pack-fingerprints","version":"1.1.1-master.20181012222345","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-master.20181010204819","@atomist/sdm":"1.0.0-master.20181010145707","@atomist/sdm-core":"1.0.0-master.20181011053254","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"929daee450a22648c86998c7268189f0d267b588","_id":"@atomist/sdm-pack-fingerprints@1.1.1-master.20181012222345","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-b/YuAWA/8OCC8f8bQjNIiFdE+9a56axdOKuPXFhg6zCY+I1/DRbhLbAeGz9ZnuIcBaW8ELFK8Y/RF+g9+vMbIg==","shasum":"a15732e8f637be070e3426746c6bd701a88813fe","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.1.1-master.20181012222345.tgz","fileCount":18,"unpackedSize":7988371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbwR80CRA9TVsSAnZWagAAYCQP/2LZZ/TyeFonL31wOm1c\nphL47TlMOo5t70R5AjKNtF05S7PuAYWYXH+srWEqAhLEGCeehDl6gLEFI5Rm\nX+2wYztJv1Gm6OTiIZyhpK0eb7f2cWLALzTwCu60Ev9RTXjs/zEKqC16mt9g\nuRyBt5Jjs8r8WThLVBCa6B/VYByyqKsKFd60l2pW7zIwPrgXeIADsapqs0dk\nuzgh6qbGTaxy556kx/Oiz73e9UKEYMQX4dLifZ/uBxTSRXMbYeoBGzndJSaN\nCqBoxklvD6dfyR/hyhIOJZRcZqmTF45bhdpRveQIDVQonXEPCDXhvLnV2gIO\nbzzGaCmseaywe9drKglHAaIhjWyRms29MCFTgOfzcB7TU43F6KYnHTpyH0bf\nsCvtsJUkX7FHITOnhK0+S1KylMtffM672WX9nCeIP2QC92MNrGuqhmiZbo5j\n/WEXgZCrVjJFUYf6J4CRBX16RJ7CPM+vAwUOEkI1ixYmteMi3wSbqZSdFWSS\nieag3qvo7crAfqOvFgL2hYp4WdTPCPXR8+jCICa6DqXFosJ+Cw7uM+dKK8z3\nxLCj8ypMpsThnFDR1hj8cRT3lXYfK4PlW9eAVoCjSdKuN5iRosrDuz0KDy18\nN7YhtJIXfo7RCz3xCxaq/flvPpTrwHPAWW/5DboFaCxJDMJ+ufaedv7GrUZF\nDBJj\r\n=Ida5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcx5BXj6S6CwFP2qPaca3lAulHOvtsCfk/UcKPOikZBQIhAP0nxKrD2nrvDd198CDSQ5pP7FeoB3plvuzOsGmJ9h7x"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.1.1-master.20181012222345_1539383091719_0.2581559020447932"},"_hasShrinkwrap":false},"1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658":{"name":"@atomist/sdm-pack-fingerprints","version":"1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.1","@atomist/sdm":"1.0.0-RC.1","@atomist/sdm-core":"1.0.0-RC.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"1da2ffb74fc5b29fb9777da955a8b467aff8cf16","_id":"@atomist/sdm-pack-fingerprints@1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-uTrBJrL/OsbGW3B53ToDEs1e3w/JaQBq+h+O1aKUUecqTYIBT9xbG1qv4MQ/2BArxFR8x6cCfXVuzybS2gFFFQ==","shasum":"ade3de44908b74c6696c7df55f4d38af8540c175","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658.tgz","fileCount":18,"unpackedSize":7988353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxJXxCRA9TVsSAnZWagAADLoP/2eEn3kmXSeRZlHFGmaK\ntIq0kmMdyRVn1BkmGdUQxix+UM38iO7B3X7NcEB2IfZ5wnTFgzKTIoklsYPo\no7XSo6CWAGycZAA7dXvLeNFw+ARPrlD9onIUxRA4CVkT+W7UgSWgFlfgEKgj\n33wX5O7pu9E0rdYzXwu8XNdVdq9MKRIECRjcCUmD95Th7zLK+dXqq7yxZp+e\nQYWtOnhL7OH/erQ/k5h4z7Gfy5052XF5GB8c4Hi8CM+f79Mx6b9brjoL+WTp\n7rdSny9SF8fbZPD1YxYo3EyB5/8Y9dvGxunYzlkkxZft4Qld9lK+N2TyAhLE\nNL2+wzQahZXlibJ3Mbb7+OL+KIRv5jiRV0EC0wXZbffcstj4/Lc6wvvXWhlI\njtF2RXiBsZdtFwYY6utlnYi58F1W3LYlckA19Hk1yIsxZFrR2Emz9Esc316A\nvJig14b0ggDcQevyr/1V5jK1/mOYMVhGqiR28gV6FrtMNvizd8ZJj4YoTAzy\n0CH72ZtYgeZexKQwBe/tOnbwzWPcNUsVone6msqsjW8IumKjm47vHT5DNm8+\njHRHzwooGab4OCGn+gzLTzt7FYBGuoAZqoaZJS1Tnsum269aBib7TahjtTnN\nzzZsFVDoElOtFcdbZKy4gCeIQeZDrrdSNHcPNVV9d/MLj4h5L82npxqEQL7S\n+Z2L\r\n=n3/g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB0k4GWeR3NU1K1jZAdrZcJJ4KA239//fQs68SqhBxLpAiEAx+1sU5oT1GOTyfEWd70fOfIfEYcwsvbhVykOy8go1zY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658_1539610096370_0.6402911516733831"},"_hasShrinkwrap":false},"1.1.1-master.20181015133055":{"name":"@atomist/sdm-pack-fingerprints","version":"1.1.1-master.20181015133055","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.1","@atomist/sdm":"1.0.0-RC.1","@atomist/sdm-core":"1.0.0-RC.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fd91dfa7da2b46d276de308984b2b95db8dea386","_id":"@atomist/sdm-pack-fingerprints@1.1.1-master.20181015133055","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-296VN8g8KRXFCmpoW7Z6rg+tmZSE3hJqYs0lsQKTucan0A9uMbU5fGAcU0u4xXHAZCCUpVfX4i1ssPa90V+ZRg==","shasum":"51ec5b82b34d705fe72d0152d884a64281aeb743","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.1.1-master.20181015133055.tgz","fileCount":18,"unpackedSize":7988154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxJbnCRA9TVsSAnZWagAA71kP/Rj8pTNVIcIUSQkuf0x9\nXrmUBKDhPTFe0XlF8cM2NGGh2Y1AgcAj7W9/jDS9FZg94fiZCgEY1F7VGb74\n5oLPZmFEd0d6H6KoG/Tjm+AeTkrM21cA7nR8isX5yKFfXutX1fiYZDV2uJMb\nHxXCEjOf00o63plssePevEaRJylx1O8hPD9RJg2fEi46rzggzj4xGsXK1PaJ\nD+yo1/udyFJy8toRJTMUP4ga5toc34w/R5S1Tdu3vb6T1ATo88mzkAyK15Rg\nRF4m71tf5Z1v0MAyOB1SoKHeeC4uOzd0M/nvMnDEIERetjSoDjYwQzvhM1zj\nBTM5go0mTpy+eik2nANbv1e1Ntx1zDAkxNgqFoDjN0wIG79ihr4gJTw/HwJL\nIMO7OmHtGFaYZqkmn5X5HO9lfSVfZSIR4wzK8Qiq1fU4aVye/9CaIzOqb4gK\n2eHYGLljvQdLNZbdfXljP5/AIN58AiHHbdNcCkzTJwmOCh5siLrlc+j+C+ad\noMXtO5b/8xTBmHsfA0X71Dmfmsektb9fu4mdJiMH0atgLWSxj+BIlOq24RGl\nIMddnM+xznETkpeNh23kXs9F8S8fslupgGIMWX086n3AWrDJlGPGdBf69Q1z\nyjwJGfDIqI5dEOG/pxs2DnDz5FYIU39Q4iZ12UVWMkT5KPRsvmg5scR20fxV\nB70u\r\n=ulhC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEcq8gNfcMGqhcU+s067tJ3OfoL1ptLhGp2nBjHW06LQAiA9rLokyAXrlwNQ9uMlAyOA4POVGmI28NACctR+sbbjXw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.1.1-master.20181015133055_1539610343130_0.09502959145603573"},"_hasShrinkwrap":false},"1.0.0-RC.1":{"name":"@atomist/sdm-pack-fingerprints","version":"1.0.0-RC.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.1","@atomist/sdm":"1.0.0-RC.1","@atomist/sdm-core":"1.0.0-RC.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fd91dfa7da2b46d276de308984b2b95db8dea386","_id":"@atomist/sdm-pack-fingerprints@1.0.0-RC.1","_npmVersion":"6.4.1","_nodeVersion":"9.11.2","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-QnocH6ptZaokdWa9xioN1lGaK73WwzgeKJU+6WxYlak9SeMB1YX0djlcUhi1Hi6fipzyPM2ifwBeX1XsqJ6RcA==","shasum":"4e4a18cbd225ba538509f4be36feffd9f2fff133","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.0.0-RC.1.tgz","fileCount":18,"unpackedSize":7988137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxJdJCRA9TVsSAnZWagAA1qMP/id4QP7JCYdxG/+KCbeG\nTav/QU87SvGvZb8+u4PQCkqmvGDQxcHZd16jZ4yx2xb3LwmPbHMiijPzIYkX\nCV6CaQxfn61AjQiX/7eaZae2FLjtcBx0+ZDDVqPLiknP/ckZmX5irAf9//c8\njnsvNDJXE4FdkVAtfnCL9hs2V1WFJZYawkTzgnXYTVULntiWYMKBuSsFmPB4\nUefsHTPwPymZs1oQYjsVZ4aAc8nKu0xPOVHQR0EL+d3D+Wu/fQ6n+O+rX3V/\n5EPNoIIY+2m5zxxyKc9uyJNVeaopQr2r5M/9HyMEGj2QLckTx6shgvaxwSR0\nKquc+MfRyHRLWyPVEye3cFQ8NgcUPLsm41O6EJMQkvb43nmJPS9IvqO4uA2+\n9yovkhiwWKb/J3EzDIdnoOXXQgUoBJ+ikUHux+FYha1PuzqpdzdKIoLc9E8i\nfh7jrF+ts6KFm8if1Phu4ix+TLzE/FyH/TfSeg9Iydc3xNwlnYjf45z90lrY\nknsFbz7HpX65Za4Syt2O5UhcqiLwU+X0VxVdM9Ih09Anlq4L20D6JtK/Zs4U\n2ZdjPazoniU2OG1ugTGKycj2fO/2DRp4dSNM79JtTKAl8E17uCePPrBXr6t1\npiix8P23IGa+ve9d5lqpA1lw6XgQKT4dbz/3pS6G+RWLBgzvfQ8oIvpy1eqI\nCm1t\r\n=i5je\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmYu26dczHMB32jQg1I1cWhjbs7jgN0hGYGCubla6tjAiAzlXea7w7L2NfnXsqzpda9NmqqOnDQOdO+lJ54g9Jnjw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.0.0-RC.1_1539610440558_0.4364838667548341"},"_hasShrinkwrap":false},"1.2.0":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.1","@atomist/sdm":"1.0.0-RC.1","@atomist/sdm-core":"1.0.0-RC.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"506c9219da63b0f0c930064b9f184f693ba32494","_id":"@atomist/sdm-pack-fingerprints@1.2.0","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-l5eR/PmmPwQEe0gufXKufGkHcXT/jL2PRojqv2bwNYZLq04UAmcL3c0NYNW2w/ef00zh8508K+PMBaRuJfcyUA==","shasum":"918cf9922c84d803b371852279327b1b4a985819","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0.tgz","fileCount":36,"unpackedSize":8295706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxjFlCRA9TVsSAnZWagAAcnIP/iZAZPwRBfaVNISS0wqU\nLwNTy3p52yjLXiPPCV+d3bU1eeiCrRUk+cVZ4uMUgiP26NXegkSj0C4tn5Lv\nDyf+Lotcr6Ldvf8GbMyHucFf3XaaRRfC+qL9gBAV5V5finwTrFf07xF4OawP\nwE54ZX2WVL9uPRukbr6cV9UOWW0E383frIXTgh9rLVu+3H/YI0+KlPnx/bCn\nBcz7tlzr88J2jSkTuXEjky86WhP0G/Y6m9yd37NiJlmuhug/0etmdsFZHHPV\n/K0czGQgB3ShCBt0xc0JxIm7M7LiB+qjP+Iul15axqeQLITEAQXAFDNLMMXi\nF2f5XTyppuESy//KFfCj7YV84HyK8LwAH11pHzvn9ykK8atGHScvk3++70C5\neZWz7gJPA6abI9NqvxcCu5DkqRvBv7yfF5do3Mh51ICF9PuxEkB3wTcWb6u7\nGK3DI3PPpTFNxPx7cLFaGQOu325V1D48GXi8QZBO5GAqRkMoapl7mhPqNojW\nYUXdg9dD3f7L5LO5N71+qRJPRNq9Yn0HumG3Y8wSD7dLK3EIyKDzQjSkiwEb\n4oi9sGKzLSplHgspskQCimjSSOmHdVCudyFReyFgGr6fxSAPg7nzTf24d89n\nYhLqwg5QmJtOkj0l3hOb+IkHB6labm4e8BdmI60cMWk0Qh4GUaXs1HmCpgN/\nR/p7\r\n=uvtw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt7HjO8nRiCAK4xGWJ8A1NC14w3zbr3GuaE6vij2IJzgIhAOIyDi6cGZFtSVQl0rQGMTEQDI6m7y0jKuaGUp+P8nOf"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0_1539715428249_0.6498920670272801"},"_hasShrinkwrap":false},"1.2.0-master.20181016184603":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181016184603","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.1","@atomist/sdm":"1.0.0-RC.1","@atomist/sdm-core":"1.0.0-RC.1","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b3bc83332b9eea07cb1a6aacd4a4728dcb6a8bb3","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181016184603","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-GOW6Pw0LnmVT7pgoJkcdzqlXJpuXDNqoBM3N8JyuMgrXZ8S4OHJdJWct5fQpH7K10zHvPIPSJ3G7rlNycLsKhg==","shasum":"0fb51d46c66ddb9d58bc6f55cfbdbc0d4a36cab5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181016184603.tgz","fileCount":18,"unpackedSize":7988431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxjI8CRA9TVsSAnZWagAAdwEP/i7BLhQP6DZWBRFdW+dw\nd6LhbS3w32hD73weV8QanghMYRh5BTIX7JiPFUeksZW5nnTyGYAkzofXjY8G\nltSUQhLL7Plp/Otz95hsFx/5VlNYReF9a1bOYTJrvOxXP3yAZKUbS3XaNrKQ\ndDZoe/Ljo5EoKwgE7ELf14FakFlrOYcZk72wUKlCHafFGSXuBrUAa467SSR7\nHYZGDoGkD1ZiaeH4JItSYW4L8kpz1fcBTsHFv6jDAyJQ2Jji4IZYOPdXzdJV\nqa5hT1DbZ+53EwaObNubyVcgsm8GkAc7Rv4U9AZ+0sLT5/lVd0o21mjJFnzg\nyBXMRCV3xRn4PD+ac3KFZ+aftEnZ3pfReDCPcAQDfyoMfBBUaUuwnF5Vbj3V\nFnWa4Q1UbFsXTMqLJJeyBXmux6ql9apRbSXeIVaYaFAVUgqyhgE7bs8WoD0f\nQuQst8Xn9vIrsb3QBbOIkN2O8eC38woVB4CA91ZF9ZRrQhNQXbCbBXNtkwl9\nUP6rTKnjuj2TkT43UPIr99RT2GcaSuXGP7Km3RAqYceBNeKNMOwEI10mnrhS\nsZlT/AcDflEfOoCMZWM69UkiYiddjjDI8LKWXPL/1Xt15nBqr/Mx2rZIslyz\njgEuOJN7bWS4ume71Nkx3MVk187EPXRm19VRF1OF3+0zii6GxWQPXU0MYQLL\nzByi\r\n=0H5v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwvxkLOcuTRxz31lZA7hq45aTrM/eHuTwJH3FE2mxKWgIhAOglqRwCj9xXUFq35f4nnIImsTRtdglvRqbFZRsELpGl"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181016184603_1539715643678_0.5787301330404135"},"_hasShrinkwrap":false},"1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"20b31aa85265ffb98ba2dfcc92bcda176ac69c52","_id":"@atomist/sdm-pack-fingerprints@1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-BkE2Iu8VVFzD7g2QOfJQZ9mcKeulMOlf83tWVR0tbh97/zMHVErYTZE1+li0Mwf35orKq1XN/NOxyKg2m0n8bg==","shasum":"7af536e81d1664e7d39a1ff50aaf2a56358c4418","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613.tgz","fileCount":18,"unpackedSize":7988464,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2JuZCRA9TVsSAnZWagAAKioP/1k/Kr8DrE63uYQFtSNf\n7hvYdAnVIQJVY7oHHDWr58ryH4f1cnvVkAIbslcIO4nE/eqMfVelfEEBx3nf\nITubgk8pCgmFz7z3l+6UATNmeaxawydk/2P30In2WiGvzeU+q/vkEh/ImZB2\n8syMM9pdy05nfWeknMtZ38hPGUO3F+QdhMQq/R+MaTp6BtupyOLRtrUvMbaH\noorT1iowPgM7zt9fCsBgu6wKE5B5/zaxudB/wJM7fHcvmDwHlBPNi+yrkBqS\nkP5J4jx7uWvXjix+arruBKUnBGaYQepOPbiyfYSZrx3hkohHyjOVU15OPxvt\nkweUfNQM1ZtBQTPhbqy1a5ZJfO/jOgIabQI9z28wqMCmmM8DtyhKVXVeb9mk\nXTkzZFJx8y/fP3Uvnhm2dtNcVP+kcBl75hsb7hPRXjj8cyPzQ2VYPrVzX5Qx\no2aIHWZI7p25j96pqZXk4PydAtpj9JGwdBhj0EckM+U7Y/oQr8dsGuTXVqf6\nUCLu5ay5x+gpFAM+Invk6OSqg8Rgz/+0AGp7AVASzzfXOCRxTUxra09M1Kso\nJ/t8uOCHr1cim3pby5rjx0fs82HJhSZ1YAHMtQU5bKcoBhF/0ZYe/dWN6Yva\nBIYD8VRcVq98VgVAEDScUCnfO6OlcALljUXz7fuu5GbYZ8nDZlvuKh9SglNE\nhGXo\r\n=dhgo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD82Ad89saZ1Yx3ryqGJYtiaGePGgvd9KSRFwKp/QUDLAIgS5D7bUgPSfTzJ8MAyHjIddAB6yJNjQzXkcv9KGNQyxM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613_1540922264435_0.7007437977673159"},"_hasShrinkwrap":false},"1.2.0-master.20181030175950":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181030175950","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"95b8cf4f20da85902849465a753d1aeec3869292","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181030175950","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-M4jPBCNEFZsc6ErXhcxfJ0vezAIZAKkfkZkyXHobvyEe00s+uvEh2IgNjaxTokXaIKOJ5zc2dtUUeo9TZqIPHg==","shasum":"387a1927bb88c4a0f3580ab8ffa455bbacb403f0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181030175950.tgz","fileCount":18,"unpackedSize":7988706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2Jx9CRA9TVsSAnZWagAAi88P/iC3DWTcqw7sriOre/II\ntCL+XfIfWt0jQFjoDHUy71nZuUWljwhXe1x4UgybdZ0emboPMuefBC0NxMqq\nENa8fcRAiqIDbLdEjvuacdGXpwDbYArIPY8QB+K8W0uXxKCAfzherzz3IgRb\njPYL7AwoVORApY7t8XGnOKYzd8laIFBKZ2hNM61uxJCqqMYRN7kUKYDkoW/6\nlpleRUZZB99zYkBXYhmDPnqu6Gf+cUCjErpVVTIEdf4UMIBfNcLI0e/41urf\ny2uZpynYRiPLHvtbFgbtC4jaxxDIqmB2S5RkwfPq5HmkV/gE6N8Ib4N9TtnM\nJCjSgnax1QaYRSjSwKEFC2ZMKm7cpT3byy+p+vlpdW1VjsJBCp5Pv17ZQN2D\nk7iBqDynvV7iRrgfuJPMMmaxdFGrgAweFhqIcIfvAjoHV9izopUirFbqrjbW\nMvdeFs+RPQsgoHGM7U3URIOtPgRQzN7ZEbS7zRPbos6d8phvj/lYXrV4kAaD\nLbCl82Rd9C18yby1+XXVgVNojVMiWd7ZBGUvRwvxFIgWcqHhyvUTFK3as8R9\nOIjGzDkWPc8Nr57gmC1hDSRuk2FaPzG0qRixz/VdHq8LHe1UEMpeIcsuqsMo\nE8/eS3bNa4jW7N+TNgLfUs/uPDvJr0p3dTtbrQt4MMiJbAjCoNh8J2PDr2OA\nYdj1\r\n=8V0I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHx1O579GzEX5HK10ytjS6tfH6MMEH3V9YIAeXjor7SPAiAmDlpdetXEIYa+PjW+Vls8soXCokvHKu3AnnZiGBR4mQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181030175950_1540922493129_0.03422695712779156"},"_hasShrinkwrap":false},"1.2.0-backpack.20181114125244":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181114125244","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"ccf9152c3b1e24b90a76df8e992c763f36dbf60a","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181114125244","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-/NLAeWF7hx4+fWyyfiK/sNz2PgngBfdg849LEEKBQGUlOAMejM9xyllh6yMY7WRwvV+DiLmzyJ1Hld5BrsVO5w==","shasum":"79c5fe8baeb6450cb16f0f1a1f140f810dacf26c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181114125244.tgz","fileCount":35,"unpackedSize":4615810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7BwfCRA9TVsSAnZWagAAIfsQAIaZDNWNcfn1tCn2nqcY\nPOvQoI9hcuqcvEF9Cn27ncU7VJ6R+PIcl+EHRhjigRMyefJRV/w4OGawU1VT\nwayDf02va/AphQ0H8XrA3Vi0CctqEeJmJc6OS6RY9FXu+n65qqCgE4+laByD\nUPWZeycfPXQ0W2gCdYT4GWv4ipBzcieglvr7j4Xhs2eq/Tq5zA9mMNrViRXu\nEiAru92TPkoYfJMmm98f00t2fcmHzzIa8kquXsN3VZngCKUFCr/fTOt+WCyE\ndvK4P11yAZ5Cmn5qd7s7xMftpSrBLsTte/QsGOo5gnHiqm3zOkOHOrAYx7iW\n9HfoIObiNNIJ2eT8o08CvY9QrVftYUohnTmP/QZLqKrTE/AOlGLQBC88kZSC\nle+wnf7nSPZPLkJoLXBss0eia0VY4sFk4CqFeArgrZo58ZEQA1MtQps8LGm4\nTU9UnDpOFAAuTEtB5UbMBMQB0sFQz41kX6/8V3TfvRgmUW5DZpI6O+SVv/0W\ncVPRvzDEjSkhWA5rqsQ3k4sGdSEUWAJX4EiIRpX8mtJfv7sVMUGI0k3QABQT\nUFgHY4RDKXNxmC4zlBqL9td9HuXgr0Asu0RWbrA7OFyE0kXauPOKNReOeSIq\n93SYkWuWn5cmS4v/Ex1cwHke9sGuqNMX9qIl7ii4BJ7gchC1PlD3/fI+siHK\nQJBY\r\n=cR19\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF14SKXfn+FNva3JlM1pGJjyaImPp0GSY75hEEhBpg33AiA62WXEb0ukW6cq5iae3nFHlyvRqNqPnvLO+ptqD851Ew=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181114125244_1542200350400_0.08647073315767972"},"_hasShrinkwrap":false},"1.2.0-backpack.20181115235841":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181115235841","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c6699ba407e42891ac4e8d02ca46f4054187828b","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181115235841","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-A3ir/IF+USuh7cYKefE33/L9tTXcguPZUJbUNeZ+CMLnZFSlqH4TJJGyv0ZwyXXlUgCK/8ZXnYyPZ89GQOWAng==","shasum":"bb9c0d938a0f8ee2f522a1d5767f8fc468544ddc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181115235841.tgz","fileCount":37,"unpackedSize":4629817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7gm+CRA9TVsSAnZWagAAsBEQAIq8XY3EDm1gO5nL4Ccd\nqER4VdmZaA/ko2IDr6oCCBjEUzP1djd1zweIZARfZ6ASLViQqdEr/7om9Gvq\nHipJs50i0aiTw/xVVp7zkYrihu69l6fsh3/E/HWEvA1ErnSLjppFRm38lqMf\nO2wcX6XvFcI+3eX3Y4OJarqQr+D/mVTNiJdZc3/ZHOJALwOsBzQDXeVIskLv\nPks105EVDAI+hx3WzZHhe4mVA9zt26gs4coZTrK9LS+6TYWSdvmLcDFBglsa\nH9PkfMpJoo+VW+K+UFbOIzIGnouAyOITJrvbCgdDfpu1YJzb7X2c9Aqr3sHc\ndAPeoy0LKNou+2aab9CtUT9lc5EhPEJ1XOXvsou8oOTy3KUV4xn+omUKBNRj\nq7wRwrD8Pn/2DLkC3KnZ3dFBJdK+E84B9YzTCjD/Fange+IRkQMEUgeTs9Do\nuAUh4W5vZC4K+cLbou7EjwjhhF+QHKWbdyELbJWS//7XPDEwLJ5H/FByN6XD\nS2GaIK9jSoLp92V5CCVTilaFwB3H9WrdIIcBV+WCo7FCfhYtG6w0WSkI6Uf4\nlX8ICU2LDpv0Q1N3JmFC0aR7L2JUrcRexYjcD3NhBqtakJh6CpsIwJrmkGiP\nIZM5y56EbZJHXSJ5CvgyuIpz9DUwOulSlXjapduiA4A5mzuDkjM/ztQOuJQl\nksZZ\r\n=Q06c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYFVgW15qHalauASuB0fUK2cKt5DYjXwdKGW/agL7vpgIhANW/tmuTUIQYN1NsCISIz5r8C1/4h+jc5rJNlpiflDJy"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181115235841_1542326717514_0.6142918856043846"},"_hasShrinkwrap":false},"1.2.0-backpack.20181117075113":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181117075113","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"a02421d56bcee653471c227a4951c8f84808b3f4","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181117075113","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ByyxKOjNCcPBhGaob1CZoVMb2vyOXJLPIPzVA9O343Z/EnvmJYwQp9PnuHPPpllFpo5iC6CJn3ZI9xGJCkGctw==","shasum":"deac45ccb8245c1b2f65415cd04745f1b7420a19","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181117075113.tgz","fileCount":68,"unpackedSize":4684859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb78nRCRA9TVsSAnZWagAAqiYP/iOjTwuXaxqEx6Pi4xu4\njvS+qbB/w7Zpz2b6uF/QNnWi7BGzE3LKY2UriKtkZ88VaT5HFblzUURqunBd\n6mQMlay4Lvhk0IdSwNg475I6nPSgURmiypiwmeSBVWxpexvWCjm47bvFIszK\nOVU0yQ3/N9gt6fvo5WzWHPJF4oPod81HSdDOM4PfU8ZKuxoYNyGlzDJzWQvR\nNuI8FiNGd01pOutzvB2k/yqXcwk4NeEVNSkHKxpKdGKQqXBPu5enNXPQtM3Q\n4Pm9Yo1y6ol/PtDGqwmbo1R4rikqX2nFJpivX+FiM55yI5UnHsRrEdk2ZoLu\nE/Y6LnN9ITEW+gfSbL3+TKbdA1dLbbObQV2g4aifoUQjot6awSGPIydmMnWg\npKpUE75T0Sf3NmS5tDC+Kyuv3Qneg5JkNq8+3xk6hmQRFkAAYPWSaXzoRvGK\nlpqLvq/4bTg4u7kRRAnQfOf4F3zBHv/L7UpLSNxEya87PXhnqU7D/EZTKsxS\nACp16i1MmpoJ/CHlYv+lfvJ4+7h0dUrfbInVJMCgaecOhz2SgQ6r0UxqLvVH\ndLNpCLS2eMrlTEnnyX9yDu17hoQHb1hVFOnQTi5MH1cRx5wenoLPWPo6ZjQt\nM1psDJ/lB24ENZD8niXBomWvfGGLKqQiZqUKhD23Xwl7yEBOc/pF0Gl6+hNc\ndiZ/\r\n=7cLv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTxYkbcipAteCKyzjG5yu4V4c7B1zV5tgI9XffhbOkHQIhANobS60z0CeyugPUD0jm/0m+guM/YgjLG4TVRqYA91zC"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181117075113_1542441424285_0.6573276494055078"},"_hasShrinkwrap":false},"1.2.0-backpack.20181117095745":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181117095745","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"f62a6bb03186c1f61867fc76f1fff90c0b26a8b1","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181117095745","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-kHZvANALFtLnCu75qPw6XFZ1o1YjCHd6kuPjuDQffHOAoLqI7mEuuDReNyi9ugh9dLhSfcZF23Kx8yreS/meEA==","shasum":"52e1178ea767660be3cf1ea9b902f6e7d1386754","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181117095745.tgz","fileCount":68,"unpackedSize":4685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7+eWCRA9TVsSAnZWagAARsYQAJ1nU+NqtpNrxgG2+UZT\nqygg8fZ1akCLO6nP3RWNDwa5IyLkkTtz/RNd7cOSF52LZJvBSa7Rcqho2Gkm\n5e/S5lN7+D1YNcvEyO5aEr5847Jzf5d4TdXltU1tZBibD1k2IHdkNnxlc817\nK/DyqZFeCnrJIqh6YlKL1g/F4jODr/Eb+Eq11RW+qeWxoIRbnp9OvY+iGfpr\nrEfHhB3LJAmpt65A2WbmNuxNd1O/kAd/U2OlHL0RBJ/PrkqztIAcwWkJSI2d\nfOycI6cxGuesR4qg8JMipdu2nWymyI1KIn+vp2vroM1T+qcu9P+cdQF5iMu4\nSuLXp1qYgeaZBpa79hLOTnaipwqTYtku8BfruZ56j8iFvSFrwm7DCFIIgPBu\n4r3Vz+tuDTUbgP0PW3rZqtVPgPWfH9RA+gjb9BjK+B8keKDNGQ/Aj+KOqkl6\ntgr/IFJrzQcZ89Zedaw2ZRnIGvRCUyVflVkpCADLToX2/UX8OSBfsxle9l33\nMHGzrZ5Ld+S2wH5u7d8hdaQEQWCCH5VLdgMkN5Uz5YAOgQO1Bzkiz77jRa5h\n4igBR444gmitEQUQaW+e2wHI4qMVTf3vPfHhc9SAUKgkdnpcQeh8lF+2zUHB\nMj1mA/fTiUWhKBPsbgfgnHPqPEU22Gv30LNd0Pn8nP6v3mAcB0MaGvnc2SW1\nMshP\r\n=xrqE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvBdVU1sPOChLPUvIsDtNQZARSkIsQXr8q7Trm73CMCwIhAOlj/Z7W5hWYQvRi8cdVVMnzCM+dBdRPN4V9mkKpHnli"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181117095745_1542449045442_0.9021452705033304"},"_hasShrinkwrap":false},"1.2.0-backpack.20181118071115":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181118071115","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"f8ce4375ff95b5a2f3089d6f5ca9f703a78e4457","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181118071115","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-2ANGN2yd1wPMOmxKF2zvJd5dDLvl6bjv7Qd3ZWqNd46Y35T7FBVBFu0XGVuskXplm4nayHh9W6hNDWR6q4E6eQ==","shasum":"37d0148311e7e210b17e18db78289a982bc082f6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181118071115.tgz","fileCount":68,"unpackedSize":4685074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8RHwCRA9TVsSAnZWagAA6Y4QAIbdNn9O4Lcdv5OuImJ0\nz8CMEN9boir5LkOJERLGGuAjv/J7JuzviRLw7sDEF46PdzmFwUoHYfAmJP8d\nLk/Xn8Fn8aF7/ABhKH+BQIvRqszMflghuEZQkRK4lpLPiLxVLHLgIxn0C7/v\nTtg++EP9eH0nhB7e2Prt8Ac+y/ag+U8+yEk8XPlk/s3OKwJHZfPYBTpnVOwW\ng9gPaTwz81M9RcYE7/yckFhTYCNaIgTj/w5CIKwfbrsm4TLEO+0PJYSSEraH\nfDuDUwtdGMwN872A5JHoHgIDtckFD3aG2K55cwfAScBEVdGqRtp3GwKrjxAs\nF1LUbc3B/pNU8BofVNf7V61ERDzG5ZAMhSbk9hkdNfxALQjMsaILrkzjEFrW\n3Pu3WF8mbQEaP4P2qVLzxZ/h2ZKo9CTkxmG/Quhsdt9BiX6N0aMkEMgPLOLm\n81Slx8cQ9Ld0w7TkR1EdqqwGcl4NtxKG0ZHmPG8NpIMg35uLBDXqME1X4sOf\nMsZBZVcDTuer6Athi8HBzEN+gE0SH6FNNqYMtR/wYMzXTlERUIzziV8F6ch3\nen02fjGXE5Br6NQ9ZwzpfMHUJbM1gbQzYxUvdAcI7FuX9aBWnSHA6C9e5jsq\ngu7+hieO9+OpRjnN+vYrBkagM3uZBEcxDoPLlFmuDMav7QWd/kEn5V0tyDB5\nPHbm\r\n=0FW0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICr2bsSIemwtjb6GYtBo9pW7dwuwODW/hciEzGNC2UDwAiEAgsAX6USFj/+C9gJT3ZS3wXpWIbm3j/j1l866o22Au4Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181118071115_1542525423613_0.8750333580655854"},"_hasShrinkwrap":false},"1.2.0-backpack.20181119200114":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpack.20181119200114","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"117b00f9d33566589766700c1a91d3dc79feb56b","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpack.20181119200114","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-yvkIqgYCZ7P48Lr0iVYHz1SFhjPl2Vrv9MG5wwiAMn66+tLk4blSHR9h+PjryXSPCQGdAzIwcDFpzyeYM1J0+g==","shasum":"28dc653efbacab83b3ac8e888a58a2c9d2088e46","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpack.20181119200114.tgz","fileCount":68,"unpackedSize":4684805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8xf4CRA9TVsSAnZWagAALbIQAJIOTK2CDgI2ihJ5ca0a\nfXU8pjRg4SIacPEpoC1X2nhw3kEwmsYOUMnLPZJURQhkVsRV8AO5+tPKD74M\nMZ0Q7woK8w7GCiUuRRdNKvI/UD6Z8/1+r52Q+gkxr2Fpk24gSU4nv+FscpOO\nMnP5FiGHsHZ+cODBJURZVnBb+x6YFP27HGet3vFel4VLHTVU555hn6U+Raok\nMNh6c9rZiVV3Lxb3gou/AmxpSfd3agbM4ANVjJIUvpaRnVSvU2+qTK5+6gRq\nWqq6VeU74uPVuxOTyN7e3m8YaC3zy2hKzl+hiAVfx+y6SDTUjj6L0E1b2PuC\n1hogQPwALzb8Fa+wgeQM/atoV1gMlcUpR+5RsVQcfIObpWdPHcjr8OaJPmzu\nqc69937c+MeS4kA6p+XmJ5zq0297wp8IqScs/7bLKu/AUdUEzWIh/fx58FB8\ng7COrEuymZOj4ud72u9TfZ6B/OOEfCXZKobB3oJN1mf3yifE9NjwanMehvy4\nYUxt6jX2n1paj9eS8XWAWYF4mRSsOeU/NrhxQ0hX5VihytDW6jgnLIMYY+6n\ncMit4QcA/ygdBr5HEP8EJLZb+OJ44WlSEUlDvI1SURznrFfFMtK+qezr8A2S\nQ36/hYbUxvTBSLPF90ev4hoUvXILyN2ItK1NzUVzKDJnMlRMUwh2ebyPI/71\n/4Us\r\n=6Gmv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHWBaIg+ZMyZHXiq8nvWquegpxsBUkTUiIZ0EEPacPNvAiEA6GpbA+tiq7JMf8mbwnnD/r6cUqHmAmk6vKFCqUxbjXA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpack.20181119200114_1542658039836_0.5329582050013202"},"_hasShrinkwrap":false},"1.2.0-master.20181119202726":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181119202726","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(FingerprintGoal),\n    )\n```\n\nOut of the box, this pack adds functionality to watch for library versions out of\nsync with your team's version goals.  However, other fingerprint diff handlers can be added to the\ncall to `fingerprintSupport`:\n\n```\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            {\n                selector: forFingerprints(\n                    \"clojure-project-coordinates\",\n                    \"npm-project-coordinates\"),\n                diffHandler: async (ctx, diff) => {\n                    return setNewTarget(\n                        ctx,\n                        diff.to.name,\n                        diff.to.data.name,\n                        diff.to.data.version,\n                        diff.channel);\n                },\n            },\n        ),        \n    )\n\n```\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"37a5a49ee7fd753fb278bd1dbe7baf1cf63d117e","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181119202726","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-IIffv+nxSJ6NsuaYQDfnC+E2tT++fWtf/wTqfp7lGTIKrRQ5PdTHnPOJhxy+9aKe7U4sqQcWKMQwCdic65O29A==","shasum":"a4e7ae2ac4da2484e603ac1143d64166ee68f983","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181119202726.tgz","fileCount":69,"unpackedSize":4791975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8x4cCRA9TVsSAnZWagAA7JsQAIpSHYbam7iV2RTwnIyP\nFI8fc0qC/bwzbwWlOw5/fYEYTTqHGqWmupDvYfGkANFc991Kst0zOhMi1lAR\nx9DlQUluU7gxoKl4gyjfoGJKuz2KUyO83dmP6WRkdjJE0wjjezt4Vr6mSnn8\nEDj6YoGlC7J4vu4ASR8M6cDFqqM9r1C0pfTUp7I6lJn5IurRe2/7GhLtRjmD\nzJyLzHkQvzQJFZlMIScBOzG+IL+ndrclDGuB4pjjgrboCht+D9wgEHzicYHQ\n2eQiXDNlFye4heLtN0D4WXNGxi9aSXMW9X1eIZCWMkiy03uxUm2m7OVajWaV\n2j+F2fsmsIzlj1KfeUsZfQKUQKooxBLxBBkZFGEjldbqNQUyWkjhZCEXbTWC\n32LMr9Q9XcO5hnRw/BvyoJtXQYsAK/94+M+JX00dYMpA+rYQUEu3dcUeK9up\nG0l1FoPijd2NFiiAeHrl+Sh8358X+dcQShfqgWxdACOz8iOjs/zeqIRr+egp\nFg8Ok6encQZyN0S9XMPkyPoWliM+UdVtDG//BuFgEi764cB/HIA4z3slPmEF\nwkDQTMj9nM+rQdZ5aCOGlzAqZf0JMuuigZmXc5vazmJRy7qe8tcXPBdFywm2\nGvzP53pZlauednuve6eH7sdVR3fE/BBbBlVqArwhEcf9XMKSz5XPtE8NUXUF\n5Cw/\r\n=5ndq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgkdTkUrR1d+NIMUIYof9bxB2re1MMEjZRtEpx8GcQXgIhAIfE/1lR8qfhC/KQOPzwb3SCwQbi+ovX32JftegD0NAW"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181119202726_1542659611906_0.48337579083995985"},"_hasShrinkwrap":false},"1.2.0-backpackrename.20181121213806":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-backpackrename.20181121213806","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"204a64f7a8399b6305633991ea418ecdea74507e","_id":"@atomist/sdm-pack-fingerprints@1.2.0-backpackrename.20181121213806","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-DfEvGiE5amM8RdxnB/YxF0xdeBHj2FZFsze3BxpCB7GXNnsyClD3II2OfKLCOlU1sm+3e4IUaZHwHtbIcYndLg==","shasum":"976edb4144072f58e16c8a0faff6a4892655a477","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-backpackrename.20181121213806.tgz","fileCount":72,"unpackedSize":4815605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9dGeCRA9TVsSAnZWagAA+94P/jqWOLQMwuJ+562J0D8C\nG8AJiPUswoxrlnt42tnu3LCv90nr+RHR+cstfl8tlkcoUzFENbF01DTo74g2\nD8kqjNwtpJc5uJtvai98GrxifUqYUy6BJy28OmXSE42vW6VP7ZFh8G2eT6eq\n2b1eiUzG4kKNzJk/VPJPDk/y3en9oMHudL9n+UggPa+ioKNEUgiDHIAsUYsj\nqJTskLHuRby8O3MTTgft1ddHWGpXX/TvhvZgPWtczSoz/cQC5dJtdhdIWtnC\nddOtX5ixpXDyPRRZB+3Ihw45Lw+xUtDpyhZ+29ihegr2WYYIJYStYWZ9RzL5\nShbEy8xN74YiJHQjE09v5maqsgLwqC4NBdSO3ynNQRD7z9McS77IYN3RlJDd\nkkyS/xl5ZZVQuErWeEUYyLG14qR6TYMBr+1WRqp8zBNi9WONvyFsFmaupSIQ\nbanLN9LdXMGlJxclahQ/OdCX2miABgkT09FXmtWQLroU0QJ6X+s+Qli6g36U\nxUSqr7N8A73H9xrsOhP4gNPACs322oOFjQ9hRNMlcBBF71H+QvnKeiS7qwq6\nFhrcW2pZxsIuZgfm3nOrkC6SK6dGM1k4/zZkBZN7j/arJeb7Ki3cymtGYXrH\n9gb968IlRnEKss918oUV3PapaVRILLg3bYhmq0FXOBVbAxowllz0skr/4Epp\nqJ4H\r\n=H/Nq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVmXE3R/0yitx/WucensKjMUFRX9au/Rj07G4CYw01OAIgJCnvrJcsTwOJCMF0jCWKrwhOU5MVPxZk54KL8CGHXeA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-backpackrename.20181121213806_1542836637465_0.8637075042001798"},"_hasShrinkwrap":false},"1.2.0-master.20181121214011":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181121214011","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c8fb0e96161242f2da61de94a3989c9b7dffb5c9","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181121214011","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-P6WpaNj+d3B4U2TEwoTNpp4UAdsgIR7p+UA3xxauwKPVLwkvDaBfsnDjm6xSpS6In/VAg7cnVVF6eR/v2Z4ZMA==","shasum":"71e1505ac5208bbff9e745cf8f2267f5890b7cdc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181121214011.tgz","fileCount":72,"unpackedSize":4815356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9dIZCRA9TVsSAnZWagAAl1QP/izupIuQk4fez1SIPH3b\nSVwiEA464tiD0f0zE8efmdDRqwpb+dq5iaVqoVHflNTKDxwN1G2FkwFZGtqg\nrgp0RX+TKHfzrWDctF7x/4iahCk2/pNIOeHH1Qi4mZsMy1eG8PR4JYFkD5Se\nYbd8CyLNXgagnXqLQiQ/nn1lS0Q4IF/dp04tRaOTDK+nRcE0ViTWZsw5v5vl\nAC+BsmotcfPZRjLnyNZCXsrtkrazT70+ZEJdCxo38SAO6XwxFmr0LeeDmmjv\n/RgrZTPMsAHFwmMXEEA3WYPq4iiUHGP7aBk70n3Zfjd/h82JmhwdXcWcK8Th\n1woIrAcDsUkZDeeFk5JnWx/pt0vGjetF74Ikh33eS62j4UDvNC5t9a5Matty\n5Y7JqzUzd0DbJOUo/rT9zdbC6Va4eKWMXYRheMYjgyNRm6TU0V+T/WtLoG/L\n6IYp9dvw2cd6AkxEIWpy1L1lsIKPYprjfBmao9SLt0Fp94VISWwnLH5Br1qU\nBO2wmdkblCNsf/Ws7xJC7PKr52iM9rKX2duKpzeY9xBDWmkUHApHplnToE3n\nhHRAq3eZ5C+FONis2z7GrjIl+Rl+XtIVuP3SeHCl5US8ps7yu5WtEmqZl5pw\np8r0+d0Fom1hMmhQ7qaWWwfqNMJO6m4SygPKMmWXlG9LCp40f78XoGjYzRot\nW6XX\r\n=J38l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnS70NKi0wl6ZZBjjZ2whOq37MWwqSEXEpE5btO3BELAiAj1jrSl/q+AgPenwLmRBgmsJRu/8LidWOHegiBeY32Jg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181121214011_1542836760825_0.5794952238378108"},"_hasShrinkwrap":false},"1.2.0-master.20181122025632":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181122025632","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"07d764756e884e0b49d0243f567fa5145c0884ab","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181122025632","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-2LdJXBvjPQTQrA1OoKiNS9jl4BzCVEjsHgE3QHzbcn8sYdFURWp89r+eI10ZqllcuEWFhVpvRlH7vMiFqHXpoA==","shasum":"41ac9cca10dbb99526ca584452a99ebc8c13f046","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181122025632.tgz","fileCount":78,"unpackedSize":4838423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9hyMCRA9TVsSAnZWagAAL0EQAIC0/NzwUkLeV7rszVmW\nDIq7IcazXtAhZSBiwt0EyHi7OnAlCnjAAKL7WMulkOH70OvKhUGp1Q/WBPae\noHh/DdUv4MaRHMjqF3goH2B52WahfigVw97BvH/POhXA6mSaWT//BK0HhO1L\nig60C9eEYtT+1w2KrF2E9n5rw0tTDKTyUMy6PJ+K1WQaPuoxU6hnE9WqZuNU\nQy/O/TDYFk4m74PMu60QCSmGOctduhrBd4XCxqEBMMgcm7S1Oa0DryJiDwwO\ndlmEOge1xWjAHmcALVNYj24jABMw79U+4+nF65VgGc0yZg+eheFyMGsyelqf\nhY4S9gCG4LUwKDN430TEYtYCGfdjZn3336dMCVKZKWRa0XBkSwxNGoLNqm/t\npGf+5dTC33mwon+zXAu1cpTbHiXWta8cs+8UL44C3+ePGTJc/BUWLGyFCVRS\ngU5fLA+/Ck6He9eh4lspCUYxduoBgAMdHG4jHNN9LwioMp9217DOWQzJM037\nKgq/hSYRBuyxN9VE4Kvu1wCE4NWEagxDSl0nxzUIXtgTjVPbwVFbN7VANtC1\nm6Yf0d/7ppDGMcfTKpFoqv69vTl+VsWAy3eRaMKYd/VoieDZ1I8HEk67lx4d\nwIP2V3AHCDSyhO5jFJoQjyn+gpzms/vGX7WjF05iEWt3gODnshc1bNphim2T\nPTIs\r\n=f8l3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC25/S9NDIphrS/uA0as3zkPI3qnfOGZc44TeSd2yfsLAiBJigqDZEoDXEkfxjm5U82ruX/mWEOnKlIBpBMugXeEbg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181122025632_1542855819397_0.26825873836635794"},"_hasShrinkwrap":false},"1.2.0-CodeSnippetAndLogbackSupport.20181122035604":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-CodeSnippetAndLogbackSupport.20181122035604","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"9ecbb344dea8479f64a450db14a8f28622a0f9ac","_id":"@atomist/sdm-pack-fingerprints@1.2.0-CodeSnippetAndLogbackSupport.20181122035604","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-1Mb7kaStynVIKWy9fmEq0hKUPYa191r/stFg92q5wdhb1pJ1PoZzhYuwKgdB7hrZgfQzqMmDA/itydpUyo/dtA==","shasum":"be59da723e7a5edeb8fd8999f1729957ffc55eeb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-CodeSnippetAndLogbackSupport.20181122035604.tgz","fileCount":78,"unpackedSize":4838788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9ipMCRA9TVsSAnZWagAAW+QP+wXHaDAV5A6iem/b/7V0\nfhKwb+jpJcVKs9b6fklHK3nK+CCgQRD+qYRloZz57KXuW2UD1mYZckWg6GqP\nQG6MB6di5eSrzygiFQvTkMxMKAIhWc9Vtu1izSiZKyueaXEmpm0HQy6RzYCJ\nUbcP/ItTuN0Oe1R7KnB76HKaK9QjC42A1sNoh0BxU+Bb8sLIBkYILK5x93GO\nnlUdfYaHQ/1Z2Tj6KuEAc9fva+W0Du/YGNE1E53l3f6MPO9QC02ZDym1nGvx\nIP4Mpl9kdEhHYWbV2s16ivx2JyYICVxbBtSEzfd4MXXgU1OF9EX3caFo9qjS\nm//m6bIG3xqI+bhVgh5R1mK8duh7H5IFx4KYeEjDyyIUjUkM0jkNaLVbLTRP\nHxUYcb13Yy9LTZyiHzIT74ryp/pcqX0g/wtCDTNOk2sD2X4LPNH41pHiwoBJ\ni4l6IxbZ/0tk+FNpfUyu/OYDcK92BwbMswD3RLGQQOs7VohE9mNvVCCAT50y\nbAfps/YC0IRStLdnLz5z2fuoPN693ohg1zQoKFjIn0H+XW+jTxPkc89HesTa\n3aCkQgoJfXxPc6y+y8Mh6bLI+QwvEasgpgUtvF0EtjiN4jjs9VeLuC3fVg1g\nAmnLDY48XifqrVrr3aIDs7ctrsOXSZJ/BZBPMx6ZdOJn3TEp0B/4J39BaMbP\nE7s2\r\n=Zloi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAamuhiA5DWOXUMU64t62+IyUxZ8Pmb1tDJG3OON904gAiAwG/TRtEGZXxBqRoL+o9ypM4XKC7LPXfhStnUnjE+2SQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-CodeSnippetAndLogbackSupport.20181122035604_1542859339840_0.8735593981311902"},"_hasShrinkwrap":false},"1.2.0-CodeSnippetAndLogbackSupport.20181122171745":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-CodeSnippetAndLogbackSupport.20181122171745","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"6b3b5511e8b6681da60e53c69360727167a0bb07","_id":"@atomist/sdm-pack-fingerprints@1.2.0-CodeSnippetAndLogbackSupport.20181122171745","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-MQWaOqeekoRu/s5cQ8a5my4N6kUmTiMwdGcQVIU8K2/4efuGFWgkowovaovoGcyWrxdS7374ScZQswQ6m2VPRA==","shasum":"240d34dc95771a438364bdb50ac78d71786b0642","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-CodeSnippetAndLogbackSupport.20181122171745.tgz","fileCount":78,"unpackedSize":4838680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9uYaCRA9TVsSAnZWagAA5qIQAISvXYyMlU2BCQY6+JVv\n6RF1Q2Pnvu5tMr92PpuRH0lbyVDKNInZY+4ljkA3ec1thmRu+xnDOzQbObuV\nvSP95XdEqoKFeoi65zmfgUGQMu/Lg0YBSHmAXtkMO3lgUDTDsMIc0YshNAWb\nLMRFsZuHlBQSXI6PTZMjsjx6LlL13n1OcM+nEh5Bnx4AXhil7ipJiEnzTxyQ\n1uRorWS6Fi2SSblth9C/Cd8uwSF/SBMI24o4GLZvp0BP+xpBpZlW6Chk3JnH\nEns9Oq/V2et0MupYpcfTbUvGhQv66YXulAr7BuWvoTk8IygTOEb8Y/M5aSVG\nlLsK3kL5oJUmg4h3rmnEAHaoTtXXYnlcfJ6Lp8LLKwz6dkJ4bNClsElf09Mi\nIlHcX9jHtYELIbZsJYfRoDe0TPF24TOiGp8a9v5zY2qpY2qYMkaPbewWHKF/\n46e8rNcQtisuag9AN6Kw2SQOz3GVsX0S8OEnvcvJ8LxHd2pzWQHCqBQn+zXd\nUbq3xggPFGIz5Wah3KxULBAk0WW1TOft58ZqEcXMV6MMrOoevBhfZnSMr6gM\nAsImgMu4RLggWeSk/mWqC5OSM3nDDqOCAoMzqu3L6ypqU8O0+TznsaN4gwj8\nsuXQbzbBQTUGbDedQpuEMT3i5rAquPyOMbIlkK2+W7i/smxcn3aQgrcKddlh\nMPdB\r\n=87xa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBoSsx5nOZBjvjOiNJIEAotKlSiX90Z7BQOagP7ABcmBAiEA+5Pwdp14Gc+iYl8zvoxOQjeR5UTGUeKjpMAS/w0H5hI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-CodeSnippetAndLogbackSupport.20181122171745_1542907417509_0.96467097018584"},"_hasShrinkwrap":false},"1.2.0-CodeSnippetAndLogbackSupport.20181123031231":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-CodeSnippetAndLogbackSupport.20181123031231","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fb02b001412227aa4116b34e2e44fca78a394b27","_id":"@atomist/sdm-pack-fingerprints@1.2.0-CodeSnippetAndLogbackSupport.20181123031231","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-hbxjQqp7rVO39OThoptoB28+4mwYnK6oiYIn+xe958ft5X0KJ1CJy2Ub94RGq+En/fP1+DPdFRXU4P4eOnPU6A==","shasum":"d0b54539ae5a1b868e83f154cc5c05849280ddc2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-CodeSnippetAndLogbackSupport.20181123031231.tgz","fileCount":78,"unpackedSize":4883925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb93GLCRA9TVsSAnZWagAAEQEP/iowVh6jzTD3tsXJURfl\ntbhKbsbiT9k0xUaPiwrV3Kg9ncKyUhjAuvITmEit36txEvJiFhMieGBBYHGW\nY55YgTnwKDnxjXaAYLAg6JfM8lqIUQzfEyB168U4B+Ko0N52u0nqROyKjo06\nyU+//dqzKrgrw5SVhWyHLykKvPp5l3gQpI+sa2FS/CgYr8+Zmi91a+xkGH99\nWwT0uaeVFV9VyYjGQpPzuMtIEl5LlY7JgFAFfPqZpMektuMRAN9DLMU4gU+a\nip3m94flwAoF4SPvyfuoJKU6FXX+MBpJHHpoI1eWqdUETP/t+CzZLfcTni5N\nAZoJlqpaxkQoQIvbj/Az+af4l7akr8jDh593Wh1MJJGYQU1bq6QgdrnjWuUB\nentLJnkOpCruGyF97yeHjySscnxOCcuxHzbKaF8ZcvFtHOR4W8TPpsQjO6/Z\nBfWx86cxCR4y2QlVBU0UK54sYqXXxT8YFmjaeIJmvQYGRWiMqRMr4ch4gzfu\nDFf/BcOW98YWbBmfGzpy6g96DUdjWfo3I5TW56YeYtapJK/JmT1JwK6+eSMZ\nt4gwH1rkC25VW0VPEs//0/Shc6RcZf96VcZgUlEV3A2yICWW0a3r0avG6FAB\nx0B4UebMpCxqN4NbHX+bMfcUBi4hgxCi3Yus1+bUNXoxY09pPSA0CajsG4z6\nTL7T\r\n=gmAb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLpzF906he02LpsIGFBAuFc3N8TC7urm7TuZepthOKeAIhAIzYCjuWRD0hoihYXpheHWJktIBdF/RlVog38RUh2Nk4"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-CodeSnippetAndLogbackSupport.20181123031231_1542943114489_0.3800888249535983"},"_hasShrinkwrap":false},"1.2.0-master.20181123031943":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181123031943","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b2fbed7474c99acc77210e578b64f9abb223920b","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181123031943","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-6k/8ch6HBcN0fGE4k8K+/DMi07y1KrHkZnDILo4nHschNdopavVxUMKbMaScX2ZidyBmHcumlfRRuZVNZ3vhDg==","shasum":"c51717b364c632518c726648f99538633d9ab77c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181123031943.tgz","fileCount":78,"unpackedSize":4883135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb93MyCRA9TVsSAnZWagAAWrcP+wQQgGyXkR4s49sihM6s\nT06BJZw6jHmzd7Ef/qAR0U6NQBB17PUhpOmnWUR1DJj6Vqi+98l36URW9rYL\n3SMte1oI8OHgOh0IP0Jvm6NZ32qU/o/pah5bpSf96hxYy8qIvii9K4gDM5RG\nIoDizmuzdJWVL3R59Jk5sQtyeJ4kU+pLStJQCmRZOlfhtiGXZMPnQ2UdfYRw\nx5dLhRLABK5Dtti8OEN8Oco+lUV72IpXCIuskwEzlkVBhHktuwhSFDSAWD/G\n14xqGxUuYF3YxctPr8Yi6dlWQ/6+KkYBtX7V4cd/7xBfBv42DQY1NE36xCb/\n6No7ueD4MV/E3Pp1ZrkSq1+OJkR/DrXSz30km+/7G0/pOlhsm1zywZKErZPK\nuLVZSjraWKC8vOY5bLHy8Fw6t0FyTHHVM7gOdrYxi/SFJddHwh32aqjreQ76\nS0gfKksO5k3F3XgizwaAGE8pmndsxcvgie6cImHoEvp1wdBku5f3EEeeELrE\n7bWC13DuHGNMgSHoyM5Wajfu/uesbCFI7NHTt2CpK3m68Is2TuCf80XS/Oov\nvX56np2Q+o1zqcZmPoRX4X5B7NRWGobpkvbKwOPCzQsvovL4k7stLv9wJxaB\n2D0xvm04o3m3lotspENV9JGV2AfjF2FXC88eHJhz+2s6jtuwSJf7k9mWOLXL\nl19N\r\n=O0NU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/YJeBOejpmtIk5h1JSFrjqacHV5C1iS0ReoJHN72V9wIhAN6uGlK88rnv+h3l+1n/puSb7jQ1XYTPOYfE3xpm2xPy"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181123031943_1542943537955_0.23497722313013392"},"_hasShrinkwrap":false},"1.2.0-master.20181123034444":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181123034444","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return fingerprints.fingerprint(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return fingerprints.applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"eaf99f5fdff0e35e271e9966c5463214786f0383","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181123034444","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-svEjooAj+7p03I5QqTRWySmHMM4mhZU5pbiZwWETGirw99Kcjhd9CF2kGwFxTzmX1t2aAUsfeXOV7ZduC1Jz2w==","shasum":"e1f0af5da172ac96d1fd4db17ad6d87cb018653d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181123034444.tgz","fileCount":78,"unpackedSize":4883636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb93keCRA9TVsSAnZWagAAbgMP/iSLGjgB3404e1EiRGpF\nZuq6Kh9BiT6C3vd8yH1SeUqjt19vArFwrRtTtFvTencv1zI8+NHZBxrleLNO\nlDYA0LpirSGJqf9VJMSJNrha5cqUePQ+12JcZ3W284xVlb0sCCKWWcj6lZtT\n0qI3OKmDYPxg9CPCFGumWuxrWytyxc6S+zSZU6EUZyQ3ZDpN3qnyAFuvhUJt\n7ys0l0P5MDZU9BunLKIGHhHeHuEkuumQDy9LicPn8J0qZwbj79BxcrlyfUMe\nUJPyTTvz27lRFXqUOwQoDQopmw+que68HAOfUilrkWwo4cQhbaKfYBFRrHKB\ny8z0DEuTvinQSN6d2NuettGgkeJd4l0USnNnd4KgfJtH+B5cHZV7ml09I7kN\nVHE6raBQcIN0ubxYKe1xhHiDO6U3cfXscM4ATW40Nxk5TF+XXjM/H1SLbDEr\nmnxv47aBVJs07zHUAJHKQaH8jRhUWvdKugt5S2DFaXa5xEIro+UgEqzoJTB1\nEs2CHbIqDP7mb9x8o1vRJgVefEhOcE6hglug0i+32hJCKn1vWoeEOMuVJ/Ky\nP1+u5tyKKdZQEbczR6h3Sm4lRhtFG35SYsWQNGtlR/uc2l+cmaxzB9cLdedQ\nTnu/1Q09UgNORFpstmT7KsbAuJ+A+y1dvE/JSZ0tO/feFp9JJOev8FdAiT+R\nnUpr\r\n=QL0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFRqWsF3v3sdm33nkjRym2+xVKvzl1+9Vr3xKkJjTdgAiEAjPC3WWGxM0IEvGjmzaONoi6Sdg2DEmYQk3VEP2IxIRE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181123034444_1542945053810_0.8935324923017229"},"_hasShrinkwrap":false},"1.2.0-master.20181123192736":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181123192736","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3bc132b0174aa1325f784c3cd4ba991e87da6bfc","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181123192736","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-d145w3aKuHarkmdJBl7g6x0cldorXXAWJ6mxV6U99r0qzO6YfELdm6R39REDOc6+RbYUfMLLapkk4LyJVHgrgw==","shasum":"9345bfa5a9c2c402ba65bfba9f6cb5774c5cfe74","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181123192736.tgz","fileCount":78,"unpackedSize":4884892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+FYuCRA9TVsSAnZWagAAsMsP/343l/0e6iwBJqevkJS7\nCDvvQpbvdocT9pOhjjFe9PIYAxwJHm05gA/8FSBsrolx4GVyOqS6wyXdHDgM\nl6yVi1UpImA8qG4rBWA7p2uhfySJmDolnv9cjKB08ymglJgyXhQq9xA3CexX\n1zgy8tmvQrIgKfzi+56k3go4TLPqiQKQP3+U8088vimbBs4/I5QrTTvp5do1\nFIyQdbhy0w5TOuuGBq0g4LW9S0/WPGAXSdSnljhSybMBsUqXBiYSCVsVXF61\nkdSQ4EAK+i7EasuV9GW81n8pSjD9tDTZ2D/5SRw+0zMVF1pCHzY3qPWeIyj4\nt4mJhli6gLYgcHPxfd3g4jlsEFjBmeEd1yf1++jA1ZbUY5Dax0WYRc4ukIYA\npIPWTJFnZ2teLnf9n5ySnJG50lZ8UNjMLlDZguElfI3aO40BbPo6PQDjmC0s\nK9V6Xuo2aDJ+bjclPzCF6NuiEpgV1vG2gYrvu5EEL5GSmny5/PtXN84WqisH\nH9AKwV4eVMQI9BECNdY5vN4S5dsKIBHGbWVPzKhWHX65qUngxIwAuWGvyhDU\nBlytVy9Duf7A96BrlCYw7F7AM2WP9n0RfB+JkPEG3M5WCQWTeomb5WWxns6+\nGVBWxx7JzYJrjwW5KcVTPnmjlzu96yoMGPNvrUW32VRAH9ZEzDTqhD5ulhoT\nGcJJ\r\n=iV5P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWvJ7pyP0YSl+7MMsiM9kiYoe2WMMVwIA5P5qu3UKcWgIhAK3zRHB3nW7d7PECsEyku1PDMCbNNxZf4AfJpEJgpm1Y"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181123192736_1543001645373_0.35310038183687875"},"_hasShrinkwrap":false},"1.2.0-master.20181123225428":{"name":"@atomist/sdm-pack-fingerprints","version":"1.2.0-master.20181123225428","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"29cdd21792bad38bd0c97eba3c66ac0772693d54","_id":"@atomist/sdm-pack-fingerprints@1.2.0-master.20181123225428","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-5lbChPiPko+Or3ICqQ3CeYkUvOPRzyckVuVhc5JagWRPpig+ehlw5v8XpZlLG+uRZbZE5nJxfI5OwmqFzob8BA==","shasum":"c6738f92f8904ac0b327bd6ae11b5a3968b5e210","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.2.0-master.20181123225428.tgz","fileCount":78,"unpackedSize":4884557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+IaJCRA9TVsSAnZWagAAk3YP/16ROSp/Nd4yimVQf26O\n3O87E+0P5vK2FQzyO6lHwECchfmT6RrR4Z7WoX2fRq+jdpMWRbNfv59IrP/N\n1aQT4yyl3JLgxY6p2jMi0wkOAIpJ9dioE+i31HIh03qyLoWX0y5AzoEiyhv5\nPPf+yx/4yaTn7GsPXENfxcD4/KxJtAaHtMZ7Mf/6o3aYiBX30VpHak8VvKG9\nGT+Q4k/JG7gBM9lArdLDdLW7HCKBmDJOFXIn7ftXTfoqxmI+9TQLlgNm7NcZ\nw67IUd6AX2iNqffnN/0rkkT7qnLe4wNIjVHsyLO9GjFLH6SQktQ9RVZ97OJA\nKfRWFRdtixzydm2TkQ1Gv8yq3mBojltuRXhyLZFPbSZmDJ0fb+yMokgZ6UwV\nYmewox1wOrFqzVPhJCXzJtqN9/v5HkGzK8sbAgaLXS8VjgpG7k6mko9YQw47\nUmbXgzS5b9k2VYxN5ovMFgVzIfpP5uZMP6dM/ZfW5VWnoOc7m6PEC9d0zy3H\na3tgvq0TIlMm9+/gdLgLHeCa5H6QjvwktErl8tt8aLGuRlhGt9lQxAV9olTR\nhwW72/HUIqZyiVIF/apLEv1nOnYKB55ko8bmNzNTCVKeIR7qkfXrQLclKdIC\nfGfgFLOLMUrxfVDM56D/tB0SI4wuPfQjasn7s6vANXdCRDfdnst+68bzBcz3\nJgAW\r\n=iAi2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYbGh+41/NVLU/a60eiyEyrLN2yhitTE/pHtYQtiPIxAiEA5EtOA32Q8EbleNiicurUVPQbW/w/Thb7CJiaCKfx9Tc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.2.0-master.20181123225428_1543014024406_0.12669833156415056"},"_hasShrinkwrap":false},"1.3.0":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"79f9f6fe3f3b3e99ee6d85407ab5596554390c5e","_id":"@atomist/sdm-pack-fingerprints@1.3.0","_npmVersion":"6.0.0","_nodeVersion":"9.11.1","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-/6l63BYhyRwMnoZiCbJybLjTC+/EQzl1irNB1uCY48GigIlPEBshGYjZF9vjahf5r2h+o+f+bR01pqDWAfLvtw==","shasum":"f96122b7fb076006ce219b705ffcd3e315e75bd0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0.tgz","fileCount":78,"unpackedSize":4885643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+J5oCRA9TVsSAnZWagAAckgP/0VJrJbO7wW5rydHiku8\nuQd6zM10+L7lylKlgxakNhhMsEoxi5fb9/1CN1qFfWs+hcblZV/bYfmLVmzh\n0/SxnPDpjtfpCStHvKu47xXOhWIRZceQ4P+jsj3/skIeVmzm0Ehx5YO869EE\nkOS27DP4iiN7hL/6TFYuj9Wm+PPcm2WW8vDsz3hq0j3brdYoQHkg/8L88zuY\nwABs3xGlUs/SsoBKuFbW7t3OX9LD4qx6e0BGqh9WfJEScig4aBgyITLH+BRH\n2E5CNtI39TcJZnont5w4xoBXZZJ3hUfK/IQ551d36CSLFLW+2394FZcnVFGo\nKCJB4hNHvx0iaYno5lzaOudjQ1675iuGTRZgZMHMeKD0kVPhHgh9w5E6ZwuQ\ngE2YgpVYQ8zxF7ukMWj1PclZ0nG74LBc0wgJiPg5RTbdzEEvKlZjHsJvOK+1\nt2icKfjYtP61/YlK9yYCWKUYtuCj6HRPIwoJd/99OAbyECYIEXXW9sUSezqF\nCjYtiHfA5eLOltHdkPF/cqhFBC3JRBiuH1INi3T5zIGyayGU+jrQbB3M6fSB\nhMrxdtqCeMdPzs19bH1H5WfjaFAgak0StTbrblrajsUJrUUIT/sgIii5R+Bx\nfP5TGg0GqMWWlykFnY+eFMqEzlgdbOQxEBUHpEJJQDVIM6WYb7GIyMqr23vo\n6tm3\r\n=GsrZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb4vYhzisprAu/FjGq+zis5TCQSskWdkXlX6jucwYsQwIgXTBoeQg1yixfI2CJwHbj1U6l8N6EK2wSzzxB0N3GKmM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0_1543020135281_0.0787417899849121"},"_hasShrinkwrap":false},"1.3.0-master.20181124015338":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181124015338","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.2","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"37e95c90b135e1a6ad8f0842a6964e32778355d9","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181124015338","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-iyYz5ujtIKGU2xhQMssdlOY6oNF5aGyXwP3wZVmsyIvrCiU57eTY3uLo7Ir1rsmLlI76yixswkCvCh4bkbqQcg==","shasum":"2ef4ba6931cd8f794367c621480686de08ffe271","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181124015338.tgz","fileCount":78,"unpackedSize":4885462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+LDWCRA9TVsSAnZWagAAJZAQAIVQhwskjjLll/Wz/XzV\ngyKrtyurNYigjsJR4Cfa7p8aSBvstRIR6DUT4HEUI+NLjT0BXtHHIYQCQx5s\nm8tkC4VunHpieOdz1wpv652KShSKJFXp2256HkJisSa1FPRDIB6bjwvInZ19\n6aCb4iWRaCILTPD5B6OkqdyxKQ4SOOhs7v7yrUsMK0OUw0vBxRXlDUGyA5Kq\nS2D6MS8JgCFh4C5qmdT9tSDXh8g61VCNej9wr1sSWzkNONeWE16LactyUi/0\nq92ntjY55lZo5ed3nyjUDGAys4YdltuB32YxXtPXtkJjiz0PSWtirjs4N72b\ngOYuKd+cqulqc1rH9w1Yum2syeTkiMM6OGEU4dyb+PMOdvjpDJfE683lSmsn\nLBFJt5hE1O9X5xGpKae/ke9wlt1j8PngAJkdpK3aac/YJ3VHw6/QjYWmTFdJ\nTkOUZUxZAnB4BgrMLAt/jtWqBRq6OpDf11kiR8VYQo4BcZF7VwHlonPlbp5x\nqleJGFF3sgmdvjiIBDBbUl79zApeD73/hxR7mSzmV0Ia6c3qZC6Wt2rih3wa\ne8ZNDZ48rW5TB2VwcJM+i9Pj/SxQ0sWCDXMvH/06AqFGSxHHoru1GvCkBWwj\nQuqOPJ5IQ2t8sm/b+NGZq/SQsWhNqpD67UlgTqkcTg1hBDw7WEH4nVoSSEFZ\ns6Pe\r\n=m0Mv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwcuCjsk/HY12oKWzrd3yvARTl2af1NlSHElrCHoQV6AIhALkfAyEwn2H9Y6LWs1SNJs+F2z6MmOQ+BlC8zZEjb5GC"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181124015338_1543024853453_0.3983549038586647"},"_hasShrinkwrap":false},"1.3.0-atomist-update-latest-1543308909652.20181127090412":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-atomist-update-latest-1543308909652.20181127090412","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"48331c907ec94fa140bc988a39e90e6069c5815a","_id":"@atomist/sdm-pack-fingerprints@1.3.0-atomist-update-latest-1543308909652.20181127090412","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-wLQM34cLnE0RPSIREP9qpGYkTPB1ruq3QNQDtA1Z6mHH+ooI3KdHXmkukY6ZbGMqvDK7oWews3WSWtgqLdcnHA==","shasum":"438f3ac798e16d1370365ac7c601fe3ce18f602c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-atomist-update-latest-1543308909652.20181127090412.tgz","fileCount":81,"unpackedSize":4810477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/QnvCRA9TVsSAnZWagAAGCMQAKEinGqsqXS4+JQrDsa1\nw4Nnjv0jYHnUmi1LxvABdr2XV972B5T+os1gx97b1wU/UGjFUDraCpBRQvyp\n0quzmgdc7iQT7XUK2jVokuVXwWMbaBMdtFm2GurnntPU2qf7Ajd/bKOE5gg/\nOffHKIP3fL/tZYwRE4aZHERW8ushVEmt1aSSJL2oSJsIzdSWcQp2bRO7c8oB\najNj1WNdIYpgg8AmQu7nO/plt0LpMM2jpCn4lnwSHqR6l6gGKeN48xLTfoQj\n4Pwi0V6tReuRgOV1fAwrL3E4Hke+HOUX/y2gMVPChz6dXxJPyV+60b6+1ybB\nFVcf11Z9HtSgQPegy+6UUlOEBNhKFrkwP+VcxFW6FMlMk2hXFRcGF//iFfPx\nDsRNuuNP1G2wTBCmNTBKI08J0nSi952d1v3r9gcGD2TlvcN69hmgPSU26o24\nlvi0eN57/DjacweC14Fgu/DLRaFW49/Rd/2ysC8Ph8YFSHnSCqBuTZQPXFa3\ng/jua00aZgyNAGB2DxcqO9vIymn/Qc5XQSJjJbg+HJ+3XiYGmJqv+/UyRwMk\nCuSlX4D21jAZaQXKGyTydya/GSCVEPqF3f3qOruYAeP/KTFFXZ/XvS7p25Br\nGr2A0D2tGgkFKpyGrCzZS1b2dd3Pd2LieOC919yH9NOhNGhMKEwUaGSs3ay9\n9nf4\r\n=979I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkW1+TIDCmAxj22iV01qvORR08bz5Xxrf1bRSxWgi/OwIgcV49c9oupnu/0uUmF2rS4VJ6oGzhsR+waSZLq4i21Pc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-atomist-update-latest-1543308909652.20181127090412_1543309806705_0.40527392902267656"},"_hasShrinkwrap":false},"1.3.0-atomist-update-latest-1543326375228.20181127135108":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-atomist-update-latest-1543326375228.20181127135108","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"651876683f43f2361aa7a845a1203f21076fc17a","_id":"@atomist/sdm-pack-fingerprints@1.3.0-atomist-update-latest-1543326375228.20181127135108","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-baE4hcS0uUay1JNYO/VtwMHs1sv0AOE9FCz6iarcO1ZLjmmXvPRBcUFfLHrwOE/BiglVbbqEOFTQpoa0b3Q/dQ==","shasum":"367fe61544096331da0f4599c21f4ed56311463b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-atomist-update-latest-1543326375228.20181127135108.tgz","fileCount":81,"unpackedSize":4810401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/U3eCRA9TVsSAnZWagAASyMQAIRENGAfsrruJuUy6KZW\nrW+YgcMHhiK5yr54DMuEZhPDsquAcbvuFlH2EMUeze+VGCsM+veYUq+Ucw0d\nRJApD25bz+CuR4AF73oPEB0IP8vfVAY0W+n8pm6OBV4ktLSTEluwDQmT2dKK\n4w3gaqfJsZrxJJELyEzRWniW7RAwl1BVTSDZG+szDzeBRiEMeIl2mZSQyrol\n1Tj7KScrfAaEbC8Uv9X7jmInRchBYd+Rx4/86rfIpTPKKmU/efPR8d271TFi\neqFJmzRf2pkidmqEg5NIrDyoRWtXjMzSi5m3LmjFraWc0Bjauq5iN1206XsL\nJnflGic9KlrzDax/Esb+roaJjQynv86JcxDtowc54S/XNeBmmnvhIJN5AV1U\n7wlplFr57z7Z8a1BKAGwjYjnRRcoS3rgrOm61GYHwNeMTbCmm77PCpL5+5T/\nBSrANbVr54xKDEka+k2mXL4zZKN0OXVnhTXpdPH8l992jhEx2U/vODwMgpd8\nBFJa7LJP0GqCXAJdeEadqZuZI2420MFKinvyjxOCeKt+DJ9XCD1a2nyMT6ti\n9MeWypJBcaNcptK9Z7d6VBR+YPGXXD21/UGpOLX1sKLRf0HqjR7fSlwTLFzk\nT45MMdzUWDvg1jFEHSI3aMxeUk/cZusmsBrujgaXCqeDNdiZJFDVhvW7OTCm\nnZTv\r\n=OIkd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxhO1843A+6RvwPRFZ4Ry0m/j2Ly3P6T02jungUkRlBQIgYZSudp0l/KUvoL/HOvzoFk2QrXZsdFANTLoM3b5V44M="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-atomist-update-latest-1543326375228.20181127135108_1543327198102_0.970012696709321"},"_hasShrinkwrap":false},"1.3.0-master.20181127142716":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181127142716","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"41d1c33eb692adfc1811f0ac1edd14ee525968a9","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181127142716","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-2H6kzyQ+oeephf0yrPu7FgjAzhV/ViXKVHrSyBQtzYduHlC6MBVlc4Zu111gnE8Eh5gJLgOlnBtB5XHa6+rajA==","shasum":"76d4b2b760d41b9a884bff89350cc96e31887cd4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181127142716.tgz","fileCount":81,"unpackedSize":4907240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/VWxCRA9TVsSAnZWagAAgpgP/iZmS1whM557mrcc9Esw\nX0CguhbogXCpvwQSKHFmBuTtg6Co6sqnX63ElJtuDxHXRgTQpbOUaZs0JxEJ\ntyZ+/cKnBhzQm9dl6CvkT8lSpqAj3SK5XPy1i0ZIQyUZGVloRyPd3JsPte2O\nraUlY57bmwu+eLz2vQHoriC+8FCMaXDwe8S5P10PZ84VP+cFW1H6wG8pGtJB\nhbFazlMzSHPum9k95+pmKCKqGqBg++B1n/SYoGjZU1A1bBcdKEHLgEfCQfEJ\nOaB+XdtBhK/NLWIL/B5zFMOYz5KRQdvoLfQ691ForDvBldinfZu0qPUwRBkU\nDdMwFyP8gXOo6m6PSOVBMI0eAsZo1SwTfn5Y0w8O6Z/2mWr3NMMgLVQF8ADk\nMQmx5eK/pfv9qzjoz0mLBYQBMW6+sYjcpLBiHeBkmAF1kQFQEZiEiN+SkiGt\n5JFitLNCjXAxEUQLCe2bxmrZ71lI2P3sHy0cQDZQkP60+6iDifGjmHPaj70x\nz2jxf0qV14R4AilUl+6VbmX4LeNLEDyb94TzIy/vXfFQtrvIpxbPzxwQpAi3\nyWxAxBV7NTX6zO2DMC7DJHc3V17nf5J6Pfa1bVQlsjlDnePemX6KTv8CCv77\nhuyu8qJ3kFSXrkpi0eq437ypnEElSwRaX2Xx7mJVPqZgqLL//5BX2jU2Z9SP\nZOpM\r\n=1rpy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA7WkB38IfFH68bSnLZd1CQnHSfHme7Vfpo+s/Eko5MgIgN+A9nJfmfq39Z9G05+MzFYzCkh/dLbp3CFyn52RQIHc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181127142716_1543329200663_0.38852525634394075"},"_hasShrinkwrap":false},"1.3.0-master.20181128070835":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181128070835","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"6524b774563fb4eb10b9a26526f6f6e65c767d86","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181128070835","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-z81LTABYI8mUvSzFMQ6w42+Mbs8v0lBjjKsuhmoe7vWK0/+VsiTSLI1CYLDZkcijVn/5IyG1VX8LRc0mXPkpeg==","shasum":"00075ba008b09827a54ccf3d06138bfb38da2cb8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181128070835.tgz","fileCount":81,"unpackedSize":4969222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/kBWCRA9TVsSAnZWagAAUZoQAJfV+LLevZ83j8hYYqaS\nVVLIVBHdnNZtiRqup80+CZZQVu93bMACXb+aXp85AODHCaQO6tKUS/KtUt19\nIHRWkLbcwcMGD1s0aJJYFiW7HeU51Yj3CJWipe5PN/gWQ7fp/Fv45CdR6kSn\ntTCQRFyqdBD/tUU73QmufMUvgZzdEa7GXAxmAP+D0nGO0YSJSMyqdQ7lGbMi\nal+3bEtBL7Y/HuB7fE5ILmbQYFWBjKI8uv0MYNuO2UBT3qzHmf3Z46DT7Uss\n1ikWcSBz00yTgONIlqy8PQqZHJY5/r0emmZ0dAItovGw9XuL4ZiAd2G2Fc+4\nvS6pnvndHmxG8GcH6LdvXRTRKTgHxAqAzj83T5tq7ZAo+eJRLup5LnAiRuEB\noG7NHw0EjAe9BIenHiusAXk53X2erfIUGo9QiE2k9D2qH6DhiQoQ8UTSVhef\nZDFkAfheLBJLb037zNJ011aaP9vB4sE2gLA+b6ocmS0sDkWHBrypSZllXrR9\na2rxTJQg0z+Ce794Sa/HULt1ndIvLcj6EDQ/492AUkgtBMBeCxzlrTwLCHk0\nfuI4dRxIlV26KVZmT6BojxbwIzA2ZwV4eA5tHWjqUF8/8J4+84NSEbB9QuTl\nRqTtFDsryxN8jXhQeNjYlPfWwACb3mLMrHWgMoy1MO8DR2ES1pq4l19AHUjx\nZGxz\r\n=uI80\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAiUPkk3TH/nSwIU6kToOsdCFD6I2Y4J1KXjIXMo05zVAiAY/Q4msjyuF+EVr1NNI7PvG8RINgFscUh3Lh4Y+7qBxA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181128070835_1543389269304_0.2759099142352819"},"_hasShrinkwrap":false},"1.3.0-master.20181205080847":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181205080847","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3a2c3edd12ff8146697d8bef7895579bd23eace6","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181205080847","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Xa7RrgEz1yAYiZxwgdbW6D3F6+j5wtuqexKNbTMsHVzrOWn8182x0ZobwV2UFHvCX9skH7jh1SQHgafXMX1cNQ==","shasum":"cb64652549cd151ec266147479cb84529e0b4922","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181205080847.tgz","fileCount":81,"unpackedSize":4980250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcB4jpCRA9TVsSAnZWagAA6fYP/39YF3Plp0zYYk4s0IIo\nlVFEv2D2wCYEtAHPKwJOPUzS3xXX7FFTreH2aH+bqsaqx7BG+k9GaneHKfVS\nNAoRK1fv0Yq3MQvi1MXUsIpyerhoYhqNQj1txqAQNxWuyzQ2YqZhRnF1AQgp\nKgMsyPAxGteQwnDktNPgRfjAi0YTVcgbvaSO6ymTD6fUYI1/xE/tM41xoG9U\nK2COqSvVRN9YxyshsgUlPn/QebLp2NSVM9Qz54bommK7cMb1Af4VtD/ijfSH\nxOE9/EnBo57cRemVPVCSLD9WkXEKv+knZNVagQSUuivcwfhjtch2X7pJU2nh\n2aoEyaerLuNX65gPcCJU1NRHO8XkOcbtSNoLqFzq+PZ4bQUlq0NjK0FVB/pY\ngUzARESKMw5TMmYcJJOlcazaFGhmnk4s4tn4vLfRqvVBvumjt5eDQmvmVdrk\n2H+9i6nTI0yK5zzuKh9L9kGY3iJ/LgHmnZHo8wByVz6Kz/wHfNtuS/01QVmN\nCU+WgfX8Sv94WemPn6BinwkiFZGj///iYADo8X6/bOD56norRWjadLg0wJSi\nfHPF9t3monYC+CU1SSH7uYIw3Ljku8a72/A2d2idesjcOuXEVbmQdxv6d1eP\nrCsVx5+gRXcFHORmq0hmc9Gh/ofufOWlxC5rcK1E5e4JeTlpkxDjd0dy50IN\n1p+5\r\n=WHM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIChVL5qqpprvyLWRxGKG4Mxr3J01YtFBF9AzL8BVgPh1AiEAqLKaMDnBfWovl6cz9KXKAvwMA4h8/K6Od/xDoM2/J/4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181205080847_1543997672353_0.6448077155305845"},"_hasShrinkwrap":false},"1.3.0-master.20181205211922":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181205211922","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fbeeba4f4a2d8ab34516032c9ed1f48d27c0e37b","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181205211922","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-vSZHyOM5HpB2roJlXV/GoHVkPIabRwm4i3ArOqtqXCvZ1jUH8PUiPHT6etvSbtwT5KvZbrGSyPKCne8MvJQWXg==","shasum":"4e94de2d585b5ef24dc016eb26c63e6757680310","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181205211922.tgz","fileCount":81,"unpackedSize":5021409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCEJrCRA9TVsSAnZWagAAJfcP/1DV0U7o5cRIx/XCleNa\n6louuZOuPRhoL7TgxgrZgGfp5SsphFzwK6vX+O4X2F9ut8XtmXQ84NbW1ktu\nQhgKrDUjvYamjBISB0h3+yzcXPho8yWVYEMauI1hXuS5wKhvcIIjC/Kkno7C\nEgV9VnS2Dg2if0+D/jxWrZH7/d5N456UYCFabQucY4jNKupMx4S+3Kd1IQI5\nbG8bnYyZMRl6i1/pj3+iZYy6QqidVnXR+0YISOigB4x7jlsQyOYnNrD80hP8\ntURgHaoprokfuxxPYVb17tUm7qmoGx5nXR8GncNa1OGcE13EnfsPnG4GJt+F\nioQX3vXfgEMhiitqgD0SQaI7DrPwbnQCLE7Wyn6u3qDyQjwmKcOcKfqWCXAV\n7IjsjU80f2pgmRWxncN5rdsU0VfNPBmG1cMPHESkjA5/xDi1CNzyl6dLYbMm\nQHIYfLiQ4Ifp7iJt7V87/HCkZVcFB3HTXQlsL83aR1Wiaj8wQjJl9yNslxzS\nA3U1N5XKNOFTZHfVHHImtI174bgCwsBE+OiLOEomX/9p191T0ies/mSEqXe8\nscuwQIoMW/hpWsD67yzWeAJgepfIIW3M/XlBhLu0t6Sn18NPpZ2UjzY/AWr7\nFK8HFUXkVPpf4p7R4/wA2o0ykiVhlZ3BZqB3AjQITtQ2PRme7nNSXziNEAt6\nDnf+\r\n=PXGu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6HlB3NSZDkt1oC6q8f3aM7rhPP9JXBLdgvlZlClZ4NAIhAMUXWW0DXRcZhteo30B8yv1u4nWz7PpyZrT7+rdFuHsm"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181205211922_1544045162480_0.6197150555194579"},"_hasShrinkwrap":false},"1.3.0-master.20181206034002":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181206034002","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4ee250a9f01a2498c251ebac316905a4b5189c19","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181206034002","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-XAT1/OVo5N7PmeS50WPttVFY2xcVBilKuV8RX7xathOch61MmL+UK4EI+BBuCF2hx03ZM1NJLpbixNHOOSPvtw==","shasum":"4ff9a471e8ed5837aa8a6e687e6856765b3f9d4c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181206034002.tgz","fileCount":81,"unpackedSize":5102866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCJuMCRA9TVsSAnZWagAANHsP/2NUExkWaE5WRH6HnlN1\nPhSufbyRBQttOvflYZKITPlZVnH4HCoXxA3Ue6MfKIidrr7NN3wqoDYBp/+O\nj56wZpB5k1jH/8i8Vl2C+PLuWpqGfnuM8JylTit/EUaEaAyWoh9vw2RooPZ6\nwi1fsoVnG/28y2Rh1F5GB5008vZLmoAT09Aj0chB1QW3V8Q+9X6J/iCuPFCr\nqh2aZzfqSFHd+oWwJPtJ49z8ZAh+UCrsvjNVtpsf6giaCJEmu0p5fSk9RKD/\njk3rmR8/UIrHrQrJHD1d2Ih9eqqjMaNTLUbgqISBanUMGRZd2mLURPpohCJ0\nxD9QjC6f5AYqDHr2k55QEycLadnX54KBj5FufKvD47MmIZ4vysMEw32/b6Sl\n0b3VYL91kmDD0zf8Iik7rneVaQwylfNaEePEorEt0j8vqDSxdZtwCJRSHoyw\nw66TJRxT7oEdd4nV53YrcD8xSeYZ0XQlOmLzMCFPhYBbS8RrFRyGFBuPgKwL\n8JU/DLjn8uihYJqpvhBQRoKAzXThWWowvjLWDicPnzcFAzq7MIYR1WJ/OuuB\nWJUHEPGCGCmrSnpgI8qkhXZU8+i+M31aMzNbCRbfS99+QXg8GhhLkTBRZRzt\nYTtcPNzOlRK5C95TIXzF9Vf6thnZ8Dta7W+Kuv/zcmARiiKi2Rck0fVGzKIO\niXWz\r\n=g3a9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyloc8vhAwgzwDch7F3w7L/hYS52gefesQFrRpnO6IYAiEA+jKh2Bm08+Bp554Zsvtl7PscjsfmTYrQpQ5rPQN2ncI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181206034002_1544067979871_0.7940827899640945"},"_hasShrinkwrap":false},"1.3.0-master.20181207031054":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181207031054","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b60f6378730e050025a23bdff213a7b9f099b403","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181207031054","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-iojr69QWvMG+tQdmVv9WGdhtp3TbzWrwxeRyUaxhd/S4rYE2l2Fb5KQVXJTAr9XFjQvKGxi4hWgc0sW8EsiJ5A==","shasum":"d8bb3ccf1ccdd7270ef63000434b19e4f1c580aa","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181207031054.tgz","fileCount":81,"unpackedSize":5103480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCeZbCRA9TVsSAnZWagAApmQP/2CJr4WpFpuLa6kFizgJ\nTAQ8p/Dog4/7lRR4ZiVBwvgT1d/4kzVLoTV7S8O1NILWaWTvJ66Gv8FlFGR5\n/Q784iQFjeBTdwJ7yZDrMcKJmNMOYLR5s0+CEq4ha1LPkrnWI7VwxEsfV7yV\nt/5btVotYInDzEwfz2RP/9jQyGM2Ddtp4R6WPONNFoxBulQUe7Unktbmf+W/\nPnVfSHAXWVIi7eJ/RekO8LYyTmCqU455eQKhiIJ3kS4bbnFYZNhwe4+bOcSe\nKlhwkg2oUXK4IhTJ500XQn7ZdAhcE05qw5gDEzn2CIiEjiqCikVCjWrpGAYC\nQenIo8zdpuHEBsx0bLxoNs0TPklsU1x9y0Pn7sIunbBbU590q7WL62LGNS4/\nqkbWf70FQFbTOWiEquO1UPdGKdExOAWaxFghRVCanwkUUFrj1PMTb+RjQ6oq\nTQswNhLHUERhyHHSpyZ0pZv44h3hnxnEgzg+nwKYJroZpDUbgXfEgXqXjpJr\n6CpR+ghucbbX7FXUuqlof2P082/sizFWBetTMOd5vaI9v0tucwk82uf1kua6\noS7kPtTtu9o3TS7JWNQqr3l/tll6Ngq3RJbHl1MQp/7roRiNQZGxhtvkAMh1\nVOy2kKtLSpsyXNPiBNctPgy1wRmsEwM+cPU0ecI0Z5dK3Ys+5Yp4laY+uKNA\nMZVR\r\n=Pz5a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDannOlIg3D7+eVBymuRWT/BJlJ64fzEZ5mpE9fBqC67QIged2/plEUU6uhvXHNvaix2SzqTK6XWA/UJqcYqW5Fu2o="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181207031054_1544152667159_0.6078779128222227"},"_hasShrinkwrap":false},"1.3.0-master.20181207045251":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181207045251","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"97dce3ba5ecab9cc59e391afffae6db524d48af7","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181207045251","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-j35KIzlB8hb8myTj/dLv1xHUD7gBLvtIOBUU1m2bdWAa86RmfRTpTadT8ciLRLMgZ+nzQingvYhThLi96PkgsA==","shasum":"4de2978a7204c8002aeec7cc357cacf12c312c61","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181207045251.tgz","fileCount":85,"unpackedSize":5109951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCf5bCRA9TVsSAnZWagAA7sgP/jlCzi3aMXa20psP/5LE\n8o9HOXiv2cS+vk9Og/j0ghg3Bazbkhhn2HqIWA2UupcyWt3PiFYdfdqui5M5\nImxQ6r/yWb2+kSNfMjLWr+gsfstI8eXDXHHVFZh9utq1gGcYbbqWMjFc7+Fe\noX7vE1Wd3q5sooDEUk41oTMMglOMNTzKLje8cpuTMlJeXsJ8bohz/WPMA67f\n2fyTPEoeUsnvPer1JB6nPuPvA3va2d7srzMf/byVuV18KpEt2haM+nJPD3OY\nynWyG+ps7e7PohwHMmTfx9+TtT1HfI9Ww891MtMDW9+nHKvDh+Sg5XDi8/Qd\nCSeuL2dmeJCiZHMFT/9bsWTdicoNHQh/zgydAaWDNEZZeaJOk9tKK8ppQBqm\nvRKytXTOC2WbAeLLcLgUC6ehyozA2ORdLjuxLS+rqpGhm3EDSiudBgbAWOvN\nZJSj3fN6p9cnCAGO7xJ6F9JXnr9M8sGvCdj947XtL9LfQDdh5wOfIoX3IlqF\n6rfILmmB2rwg+JpQpOThLdGY23lPoRZWGeiIdhsD7vJTQn2gxTXllekJviO1\nx1fdN2ztNTh+BJyrRjpT85Pb/KRKVHKP9U1VHIK1RlEeQEeTCQDTAwVovCNL\n+CITymM7MqCzXrtn1Rdz0bhyjXjeilH6X3AYQmlWBk9J6CdGlC84e0fFfvrb\nhXDG\r\n=CrE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVpe3sdcntd1VJdhApDAppmSrEAfb0GFP2lX9HW/ZmGAiEA3VAw6vr/Wq+4foJ8jEaxZMc8g0YOdIVbl6UbhCVigtc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181207045251_1544158810515_0.003306662481427969"},"_hasShrinkwrap":false},"1.3.0-master.20181207192753":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181207192753","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"35e02eeead1add7cb783f60d9ca8391bc42cc140","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181207192753","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-tCiIhfk+HOhqive+RvWeVnMKo3HjU9lJ7tnXxbYGgPIfcaSViuljRmLNfMcqm110X+F83elLesc0n5aNNL4kOg==","shasum":"0bcf80a7feaf00623dbfc7e9193b01a58aef1f62","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181207192753.tgz","fileCount":85,"unpackedSize":5111796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCsuuCRA9TVsSAnZWagAAnPkP/jjqy+0tmOFZNtzyDG4P\ne6hc5Kah8W7BvEFjI9KcmDwq7b/5/YfrowrSDuaVaGqVbcRY9t9SyK0Np0fn\n8ryGApca0l7WqznlXbF+w+EMSpc9q1zAyTeYpSNU+Tlzcm9OJp9yVwZq+9xc\nzwheQ0B/tdwXs8mYDiH3vNFfd81XpTNkg6xb7enIevMFzFVgSUrPE6gJx7By\nSyhYEoNFSHH0qQQ3MEfgvfLytREVUd8ZaIk7T62hnlVdxvPgzxrihR8Ch6nu\noZCw4PWJBA+CW8BzSyMz/TU4PqG+aMFWqycon/0s8ak6S7cUwkdSRZsgo7gy\ndcYJgtIWxTKsa/I3yeT81DP2FREqVi0KUj29ghLmRkLPVUIsJW+Ndqq72jxO\nJ7VoWYvks2RxGaGiEyMd2k+H52ch1dsW45K8lALkqq78fXl41Fy6jJXt4e3d\n/rQW31t/aw0V2w6ExBR0fq3rj/rM1kDq/OKuxNjTcKwiiPt80M/p5ehD6FZc\n3ygViWldCMOUCPf3QuQnC+YSFo9MD0KxClp5PCf8n8EgrKWbPfX+H2KHNbAv\nlUyyrdxLDkQNheqrECVx0YK3rF7pNasxUoHPU4D8GxMpeFnU/DdllB+k3vWv\nHt2hrfCUO+AhE7UyEmKNt91xTIYP7xBRfuK0vuN5stQXwYhbPsBmN6ZdO1ye\nNiTP\r\n=AWhv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDYsAFmO1TQEYXfygb8qmfXjxZR0IcohGGdjS1EyJ8b3AiEAuZHp8R+EGmePKwR2jxRJQ4MqxmzKzj8/hu3cRHIn1MM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181207192753_1544211373299_0.37900707915104737"},"_hasShrinkwrap":false},"1.3.0-master.20181207222143":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181207222143","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"9e18bfb09f3a59bcde0fee3b0a90f727d531be9e","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181207222143","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Uema0U8aEdbpgQxpIm/RrBQQOgiB0/svif1DcAL+O41yP6Qe3bvDYS69CThgLQ/8YJ9S23ccRydB1dG7VeT8tQ==","shasum":"bf0036b3e9ceef196b53e5114d909ec7194f16a4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181207222143.tgz","fileCount":88,"unpackedSize":5116160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCvQ3CRA9TVsSAnZWagAAEQ4QAI4n+B/2DuLbZtTiuTIG\n3vCqkg2fol8Ge2ZA06p8C1YFPd50i37TF9YDdJSjnTf75faSajrm5rBiBNyZ\nZuSkIKU17kil0jq9MvAQzT1u21R9CVxTaharnnI3rld3kTYTKK4w3VTxwZv2\noJOYKVTybvQxZdZbdShwOToA9/ZmcWBYvCQQnTHK1RFsDqN86iB8TE90C7AU\nYieny4JYeBzIG9UGXAVy8LARnCuKdM7gfGAizDj1fpfyKjUcUdO7Pxd24B35\ngrV1faToS3abBuGpXiFoPWNsKHUiaWdrbKb3ARXQfoCeLTe1fP0rr3tvVk9q\nhhzP7OZExNgLbsNgjTqbsutUuXpBboRLBvGu0dhILF58df9Dmu2uPfTqTmI4\nsc0ilOagHAf6I/AcrTbdE7Sajk/qa1eYWL5DHCdbQ5DwYuiv8fB3LxazJ7/q\npQ8rM4vLBV8u5F4T7TjHg8tdP+5+0Tlziib9rlnNTy2ZC/6bmwre3W0dGMY4\nTuz+NuyIoYQ4neLmbkLN4v9IxZRInAQVhpiygpBtPTgl5S5Kceaqq4rWuVQa\nRPGXnggoj/OuahSttakDF91vK2FMbusarQatDlylKeITkNsPF7gERr0RoLXe\nOkWybe+uMHRifOuPViB5Z74nqGchE6cgbhejlrF4I/faZgahQjZnWVSc2vT3\nRDYb\r\n=MFTF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH67ZAKvPVB5vW5iN0FTum15VHrYG15AjkI35+v3oNBGAiATQUnaXj9g96shVuA+G5Z8DgXbmv+Nl9Z2pVEiQ2v0Ow=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181207222143_1544221750662_0.39141106431418105"},"_hasShrinkwrap":false},"1.3.0-master.20181207234603":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181207234603","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"234455c868c1d26881ce93f2c7ee561276f05e1c","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181207234603","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8liPmiE0N/GQhRKFJf64b0gIm6Zdy/1+yoc8JNCpN8JQ6YsrRGVvMdYZeZ01WGQkjt/PvsDcKo2kkskWwdBr2Q==","shasum":"9a6068c25fd4c125167c878319e1f142c2dcb38d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181207234603.tgz","fileCount":91,"unpackedSize":5119528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCweuCRA9TVsSAnZWagAAlHsQAIzHl2kRtwibCd6PTi+W\nSfrfL0TOUTcPskl6qEhmaktqqLCzzHAwxGFlwwX1uAn7JIVTRx9MKl45etkU\nINqhu8Mt9F9VLucckcn9EOx+4pe28Sas34ZBeUBTMDb6HtZzaHmYtTXTRx9G\nlwccbVxM2GCPNI8vW6AwMwqm+0rGn37aWNbZ957D5WgHVQagLF5wWzOBACsy\nEm0ebLEWR7YYdp0rGQwtUSuMTxo2jLpiUeGkPk6hZ1hGj7a+7VeJgMY4suPG\nWqvnYWFW2a/dDX4yQbbP8dWTtbvSffibBWmNbotG2Zhi84u8vseGOIZFdNTD\n3IyiVmx5W9cG5ed3eEz3XXIopyE6EXGK3XAhMLjhJQB4YBRsbDR47riYvCAV\nPhmUy+9vIB/p44cT6T76ZjGB2knBUTmfPKxYfgqaEj2BNh+2XieHB/48MOnn\nMkt4lePZqXU8JiBJ7xN+cZ1gZ6n0gQ1pd6+aJSHypHCi82A0vkXMr7jeEmEV\n0MnL8FJCsjyMCMLN/Bo/E3NZy5fHUPF535AEdITqKaZHNknTtIZl8akrFipm\nV9MrOGwtoQofYuU4OvYq4E56NxxZI/FO4Ou6ufz/M3u7fbsjfS1IQg+dpZpf\n1Zsm8llGcS2YuSjO5vYb1JOaRLLondugMIgnComv51ukB27kfw9B8BpqTrXs\nTmu+\r\n=m2sM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzWRrODi4ZLFkqnmh9CXBw1kwnHNf8JGG7mYUzHJKZwAIgP1rtDvhqzIIrpRUxB4wWXUiN+Aw1aBWS0gXBk4Fen9k="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181207234603_1544226733345_0.11600197093548514"},"_hasShrinkwrap":false},"1.3.0-registration.20181208033114":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-registration.20181208033114","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8bfae3fd832898198e72f06c5eee0a8af8ed5129","_id":"@atomist/sdm-pack-fingerprints@1.3.0-registration.20181208033114","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-LBfrBKqJNokKHlhbxB8eNKdQyV9lnTOw5ZA5z0ukJTSlNOMdqgrZUcM0H+78N7QL+03LufOmunrS0sGm28ooEg==","shasum":"4ec8f048ea6fe942c2345ac5f9b901573a4ee3d7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-registration.20181208033114.tgz","fileCount":91,"unpackedSize":5122422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCzySCRA9TVsSAnZWagAAksIQAJIM/LhTA9U/kPxyn9sn\n2dboNk1uzhzkpYH4pPWi4iYP8gDhW1CiehX4sbCx1YpTfMuqt6bzD2Ebn4d1\nGhUi/h1KA6IDafnjJOvniymiXpplOtTKceDVXyf3cA6a4aSsGXuFyToiHt8r\n++1AjaZYywtBwDId4ezIZf7jCZE9Wan9SUnUemEGniU0Yjcd644bSS8Qpb36\nmZmagcPQoRR9uDNZ5pjq5eHTigDaoA0Sd9+rohIzS7VBXzlu7Yo2ZhQbaVq3\n2RVbkQfWitijdkLk6C7pdbPmx4PIOPAQBdLRLgN88s3s1HFVmzaM0JbE783g\nMqxPpFaPMn2ZCq9+5Wm7n0dvohxI98bjrhJknYOEF+oW78tUag9nuuvt8sAb\njLd5VHoucuko9ByCmkpmfUrCklhMhi176BEwcgjGB/U8o1xSrPzVrQk+utDM\n5Cgl8IJwkNA/dmIa450jKMTUCmISYsO/0fWFPy7ONN/VW2d3FHvOS54QD2nJ\nGQ69cLn7tnQYxmMYbBKVJyUTNEP6NXAnEbCr9P6GtGawh1ws+JW8Kj+9P641\nFc8SzAMjcPnOz821d4ziTVR1gwBJcSrOn+6CxPV48kNP7aQo5Z3NLve7TzoH\njwhGoMfRSAfSMjv35/aD0SNW9H59EXpB+LB/rU38Sa1M1c8P3Ix/R+vM4Hn6\nGrsj\r\n=Q90A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvFFGcvtw6w9mF3LoHCmGyMkVZ8AnboqVN1UCFRgJBJgIgKVPjo6Q+qha5i65wnpCit0X4EcNubQzvkBO4dmSB51M="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-registration.20181208033114_1544240273837_0.2598119109041441"},"_hasShrinkwrap":false},"1.3.0-registration.20181208055935":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-registration.20181208055935","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"d0e77fc06355a670b8a8a89ff874905303cbf38b","_id":"@atomist/sdm-pack-fingerprints@1.3.0-registration.20181208055935","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Nw4JR9KprT5MFeJnLy3O8qanzBlEoNwoZ0Q971stqF9Jp48nHEo6iLh+/I1YfJ5IkOAcDqq5IixHQNFXaDMQpQ==","shasum":"3611cf9b3c132e10bf25f4af50d942a71c008479","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-registration.20181208055935.tgz","fileCount":91,"unpackedSize":5121466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcC19PCRA9TVsSAnZWagAABBQQAKNqdJXvLSIDOWS1GM3V\ntYXe+0EEl6SVWmUxbKqn7/CFu3QRaHHa3vmf0Z90e6Ab7mnQ8wO4ZITI1qaK\nL2qgh6zChV4IpghsSmrE9KVRyjhVIRiGjDFzIuxs9//bnMnx40TLUAy49/UT\nHMiqMyDRrEBaBPEgN8JNU4x/qZ6y3O1jXNh+Qs/1njeV1eikuLBon7bLRVTp\ncKzMNLJ02jUzpCe12nD5WuHbD6ccFaht+M+OzvcwbxE8x8pRTzwdcd9H4gdT\nvGD5vlCucInYPTXlF3kaVz0e7b9EB622YQqyvfC4LlgcKhWXRzrhP9Q33zRd\ng3ShfhnZI2JSCv9QFTJx2YC5kTk/YoLa+oCwEIx0fE0/vGkKJsIFjrZhW1lh\nwLpoucxP8IAu7+VoSoo6wyYXWALGeD4DoV1/IRJ68MmF65IYVd7ZiszLi5Bg\nXUpeHA86I4+8heibf3U+OdBb0dCzQkP+qev+GW1iS+Qt/I7LnWMJOhyzE1PP\nGFLiuFEd9TaHmR7ONzFZ27y1WiMBA+cutpV9H82ihM+aUFOosBlOKvY36NW4\nIcOT1M8q6yD6DJ6CD32GfJ76ppdP0OK/3ybz8IAq3dIFra7rBXyP04ZTPJKv\nTzhgj16e0iDtl15EVXpROD6IetAEYycSTb6yBe9hxKGHwuligieKZqy9OZ0u\n2vBn\r\n=BEM1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGZV+f4/EEJDjcV+jwwKH9NvHJUi598t9rw5QcBsJ0OAiEAyVmdk6PXajm7kBz0Js/m0SGGQcaS0weegqZ6NT5NIAg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-registration.20181208055935_1544249166852_0.06548309727174528"},"_hasShrinkwrap":false},"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7dcc24d2247a6bf15d330e29bf81ed06c56d2432","_id":"@atomist/sdm-pack-fingerprints@1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-fsvACC6L5QztKf+7IM2B3XGAbOK7smbuBlqhTlWgYB8d0WnTJJc5m6tON2DukNkzIMvtTCKG6upB/IXIUM16Yw==","shasum":"085b6961464efc4bbc1cceda7b79c0101ad17050","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625.tgz","fileCount":91,"unpackedSize":5120122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDrOaCRA9TVsSAnZWagAAEsMP/1rypa5QIBLtqLT3H91v\nwqdE+mqlFwV3aVH2EwXKyJVTbTVeAv7HjZWq1oTEr73IfaT6j5hoGmTdG7NV\ngMD1YzThYpuRzhi5cHXCLzXFPIiK19ytYWaZWZYI6d5e3Z0/Zw6VIrhDbohb\nIlV6LfTKw+poESUYx/Q20dnSB84NJaCCFRlD8FwXnZ5k/9pr4nZ4O30AwjH4\nWcDuRY6MwEI6J6KlfNLIILrDHdoDr6dps3Ay2iILNgxM34ftxxzn/eUCYc92\n6b2lWgUG8pwnZNZ/Rp30mP95Pz7ZBbjbn6TbAwwR+WETC9tkNQ32Chwun7bv\nXDGoiQ0EXsMYCm4f9jSRNz98ufAFDUoy4onA31yPkR/9iwA3WrdNnj7AArmH\nNfzuFeL5YzJbESr2Y3ibPfAENqEDlIpz+MQIQGzs9YxK0Q8D4nlSKtttzFIy\nTd+Ns712Gdmn9oi6lXEELiPtAL2tTqzUhR0bgFDtaCxorPjWPK6Km989HaXW\nTf2Jbheb4TjVUWufKbwS8jycLxNsvpuBUUeR0rHyIkXo3AOvDe9DkqkTwbmb\nS40bWJE35ICGooiqEoJxPTb+/ig4tQ1FE+/97WHCGVPjKSSaphrZ3unEOs+v\nTHM3xCFfNnqhoaKBDLR6AAKv1T7x89XcaSFStx2uSykYqGMu1wbWRRiaogzV\ngyAT\r\n=b4ce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNzQyil7eVAh5VlDYIb2LVA/FFkFRWUGn+aSKJbg07yAiEAmdocrv5SUy0HaN7P+WHqCWSc1iljYh8fgXZxWJV2rls="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625_1544467353613_0.3482811683038938"},"_hasShrinkwrap":false},"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"1256e85efb1f2b508fb43ced1f9fde80005e9566","_id":"@atomist/sdm-pack-fingerprints@1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-c41E83+Mv/t0mWPqROmY2syEbQ7rR36fPFi9ZvX12YF3mmMi1xXNLOawSVqeHxXMr5sr+YJPI+Em/ckbvnuz6Q==","shasum":"e7021e354f29e3f4941359c6ece91256b5cbae4e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347.tgz","fileCount":91,"unpackedSize":5120925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDz1XCRA9TVsSAnZWagAAvV4P/195lpAWm+PKMWBUITKR\ncEfD6dvz3sUDrH/jSPGt0+g6lt5Oc/BpFtZ97PVkCZgG2OVbPiL86tuZw7pT\nr1B6LWgS0wtzZYy7C4nv2wL+1++hV1cEmm4BB8v5xMgSd8+F3j1Q67Liub5Y\nRSv9Hf88ab2DY4RqlQIHDS2sbYXWlY+d7PwqOf5DHvaH9g1td2p+kVPIJaVF\ntsGiOBqv31iYwec6D5bfS54tL8WYXF8xOBNDgoeWuXSoM6yMFSOwMFfTlj1c\noyaB6YgbedXXBIo8G5jwetsYTpl4iiE5ZoB/0fdjhPYJ1AlSRjqGAGedUEZl\nKn6SbhVKGlGZ9lKWVYXwxijKzToYal1VW29jk/RdiwYiKPxoe2tXQ9m4jRiq\nc5tCAnjdzYQzMkiqfQZwwFHAez6QKCtzYdlpbQaq0Hfik0KG1DhxXwRRU8JC\nxXjRztp+qiIfuRhJzU4bxt4toHxPtcJdJJrp+RFIHOnpNAXxg3NiQmZHTuwo\nOkEqfE7obC8QLWjrhhqvVAKr8hrIPyDHtzuZV6yBqO30bjQbP4j07+lImvMw\nWj+eQdGOS6sofvrNkc5u+mAZRpg4pO4MIAMG95irg255dYscsiAWb3hOzjwq\n97UfEWC0TcRDAjvGL4raYCCVnV/HClnnrdJOOkNqNMg5g8TcUfghDtjB81EL\nJi2N\r\n=1nVW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBBcpYXTyzBolh3DukMzbZSKHIUJp5SDEaMUD8idvJRAiEA8KpNcOQ5nKUzRGsYCoHQ79Ox5uhstjlZ5tIZsEjlcPU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347_1544502614233_0.365942658193112"},"_hasShrinkwrap":false},"1.3.0-registration.20181211081234":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-registration.20181211081234","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"178fa205a4f107f026fcbc3f0d5cc0246e6861ea","_id":"@atomist/sdm-pack-fingerprints@1.3.0-registration.20181211081234","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-nTrIc2vjKUOnAw47fk47DW1XNV84P0or8sXRk1GjY/meAZQ+KI+7n0/m9dFm9/9TwXo2GzRfxXedf2dURFnCkA==","shasum":"e5878a3a537caea33b48821a4fea3e03d7da1f5f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-registration.20181211081234.tgz","fileCount":91,"unpackedSize":5129567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD3LpCRA9TVsSAnZWagAAsvUQAIEVRv/KFW3EP5hex2Hh\neXhFmiBGL4Br1i/LGBEwq6oTYRYurb6uP0owlac7BNKEC1p4TuSI2eVsBstr\n25Whcp3KL06xqJKIqZIsOg5xeuHufudUNv6YkhZQBLbaMVGnnkNQUijQZh1V\n0Fvmn/dhQTFa2RWlPB9gIl2WLcY+Y2EVPYKHqfBT8QKFGNLICKNQleVe3r0J\nBx8LTuXJiJHLkJO2aKy8JpTQgxCWmfYNNhalRq7KtCwWUWlgT4Cecwl9F/05\napzbTXjdUEhnqQ0HEiEgWIWroOD02ECCDs+g32vWeFMdbweu1l8a4Jepi3VC\nev+ZyFYqh+zzjaigoxgos+IcjKfyhHkaCR+IZ5DRaQC5UyYshctbWZBlzaZh\n9j9CrFq001v4IKYHVY/4e8iS5rKjEbFl+qDImhES/UgTtChH7oKq0NWUzu4/\nMzDqVNS/nxfZpSY8+wAoHJxPiBYC/AEUIUUafvhZKx+sdC4DHfXSGr8cAgrS\nheg9V1D7/YRIV7m/aTl2KYKbVpnYndPXIaZbTnn6Lur7LzggQYrNqTtlt2Ia\ndT33/nbHbf/pWI3Us3fBy1w5BLUOGJCv+LhGOZdW/buS9DuqnV9S0vPE8+Xf\nF3v9zYqLRws4eg6BfTRNOVRmLiIWa+wNsQ63KHOA/bDf5WMXD5+jxm2VtdbH\ns9t8\r\n=CfM+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMmwASigBMENm852yuyc43oU4/3VeEGob5Z/66TKisbwIgcYm8BaNNa1PZ5Qok56p3KBOAFaWXbhK1FI44ogUQJlE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-registration.20181211081234_1544516328176_0.03828341705819582"},"_hasShrinkwrap":false},"1.3.0-master.20181211083706":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181211083706","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"45f1d516af34911c0f884c1d58aa167698d99a0c","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181211083706","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-fMhSZS1HEY9Z44rQk0BwQxmUUwElx5yy7KMer3J0rTACSz5kn1VQHmn5BFuQpq5relPAli2A20JV5TBJHC9ziA==","shasum":"796e669ad0e135c35b563fae975cd109615119f8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181211083706.tgz","fileCount":91,"unpackedSize":5129907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD3iCCRA9TVsSAnZWagAAHaAP/jl7g/FDKfInoR4G3bn7\nW5nsQdYh2zsF8zsI64qI/6DgX5HtyH1rgEr++hyX2rNLdzsNmV87UEUvaHJ6\nd3GFRp9U7jGGTq1wn6hcD9NE/YUc8oOnHyA3deM+VB/P2alKJcCuM/xQae+O\nxl4gfcmbAJ/wuQ7e5QEZCZ0SXVWLrn9EUT9KqoMmZC+CWsgg/EE27Nx4mRmw\nu8pU0bdugWIBgq1gWkGbdm3YBmMNMMZsVdKPwTRUmsWzhEwdPzUxrh41C5NI\nIj6Rnp05LuJI9h4eFlQtMTgp5IIumpOWg4/OwvJ5bOzo9wa2EB+7v9h4jBBM\n9mHcDkoylhyp4Ob9UyCsqZW59iToZzhA3hlbjjN9nTYgaL6ZUkQMVZeb2wwI\ncq+gFmsoMSnobNCAx1kfgHMsaFIwU4EEMHUhmMEW0Js644j66yMviGNrwUOz\nx9V6eEAdYDECdpKCRHj89yO8G5TZChOaEV+ki2XC0JBor6jOao+tVXbPu0P7\nLQUTW7dHJLe75KXsA8dRXmU3IZrnyxqIpbiTfAkbls7M8L/IdXLi53Y9aIO0\nSfx1GgfrGJ0Aa7V92irQJqud0oC6kWqVLgfQfKQsHiiPzYlxSGDdEaYoAi6Z\nBAP9T7qLyY28rgFZQg6uXR/1aN+h8t0YWLwMQlt7NNJULDhw7PU6SBY/7CHA\n30h0\r\n=x8/x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICs6Yvjvp6ABgkrPumFrd7dWZZ6UZ/Arl3CdidHeH3iFAiB+gDJoShRBTYDOPOI2hKIHdOy9uZbuLTTMXb4avzoa9A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181211083706_1544517762167_0.43410208386336335"},"_hasShrinkwrap":false},"1.3.0-docker-path.20181211220142":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-docker-path.20181211220142","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@atomist/tree-path":"^1.0.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","vscode-languageserver-types":"^3.13.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"6e398cb299b6bc051669a73aafc46b7107f57276","_id":"@atomist/sdm-pack-fingerprints@1.3.0-docker-path.20181211220142","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8adWUbbpZs7B2fKE72rUo/AkbjgfZHmGDomqutI3xqErtXKEtYr9eSCs5dtsmNWUMetEhGadoSWwNvvElUJO7w==","shasum":"293006e84223e73ab8c1691b2909737c1f4001ab","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-docker-path.20181211220142.tgz","fileCount":94,"unpackedSize":5125595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEDWFCRA9TVsSAnZWagAAbeUP/R3dkLBFvwUrjb6m4uJE\ns6CBoTi+KDC+Miw6ELSL/v+S1o8QOmnUuyE4H9VoVsdF9NL8eODmHUx9h/is\nIjsUv9h7pMHMHMEO8tdRJtqLzRwcWk3JDEN4iVirpJFMj0twWdRWZBU3zp7Y\neiuHF01FS0veom2hxULjvq65kcxlYy/ALte1vus4Yc5/xzRq0bLdopXlnXNl\nWo5NL86NnJdSXf16Cbo1oZgrddKr61rntyJzUc5qIPBNHmA6bkiG4/2bgAAG\nG9cuJptF6k9YD4Yux6BxonSfzak9qSFBs6zon5GuS6m9a9bAx0V7w0ECj/wI\nBf0P9LJZecX/X7WcrDYvQECw9VyTkFiQ1ERnjMJINNn2eWW4+apTTWFrtwuu\naBjHAawRJE0song8uvzT958ydHYUVFvAFXudFF1wA3NC2qCVyQaw6E/Mr0Tf\nnvWdlEg4XuZmyDddp5zQUSPOCUb70alNnESVS6pEaBvJDKgbmt5tOC53sjqv\nhAu8cQKZ1/TE2dC6QYeaCsRkDK5TvIYQJXKt0v9WSHuJ5mRtpjHFPjQFq+Ha\n6UW804f/cK+3Qw4ip7H1PjQTvPp6LxWq9Q9eXXwPilV5/Lk1wGbw6RiKtv/l\nyPvKkU5KszI5J3b69fPLa3OrY1zOWCR+qVUH2vlxTJo64/bRnF1l1Z47YD9I\nlFq5\r\n=rO/B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCD0ztcO/7Ze0ohUyw72+iV1W1C658l+geXy+IB/IEu8AIhAKp2t1Xl3UfQ3DXqAsk7cB4Uy0GYvY+I13fvesurKj0M"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-docker-path.20181211220142_1544566148547_0.5372359586482078"},"_hasShrinkwrap":false},"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3f5eb99c63bff0608c218dca75a8aa9c7081abd5","_id":"@atomist/sdm-pack-fingerprints@1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-eSzmmOyLxVF4LjvKmFsR7kFLHDv/MEHdnlHA25OA2CP9U+G7QMSxh0UESQEiCcxCc1/07a7ygqTyNW4OIqziFQ==","shasum":"5b8cc42f50c8fd1f42528b31a8865888c03ce028","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012.tgz","fileCount":91,"unpackedSize":5130000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEy7CCRA9TVsSAnZWagAAk2cP/AvZpmBGtZOQpV0Q1idF\nGzKOKUuenkbIn4NvFmFtGiWN8AbXssFw3hww9+K09fP8IKtctRu0HlIIIlJF\nOF5z4M1FRFrO8bXg79Ex9Tum/6jen9MXK1x7XDMqJkXxggj3Ax6zVCA26GKw\nvBOttqnw9hwa0PQdwp1EsUbYnwhmN3MtTUvHavl2htn0dosu7a50fiRfBY09\nGveMQWp0KPhCAc2o0LYeazLOxOu1tBRc9B0HFKcq0nrn22HekaNnNTe4qEcT\n6MfUq9EdDLpR/IFto3vdtXiFDBWvF7kVyXxKKQHWuYzr077QYaetzdmT44v7\nMEyuZmLqRjNSPtIR5TrgEfOYr3/S4VgG3W3K6ifMaWBSsoy7Qm6fuUneSwN4\nNVk0Af+GcJT7CVwaRZv8ZEldQU4FM+EMUp/dCfhPRG8oZzGcHbMhyMorNILj\nR2JWrDWNhn4IeN9w/JqpsLGlldRuG1XcWH2gRoT9gbNPGqHYfRXv5LLj9YTU\n/2Js71693NDvxcjetnZs27jpgxEptQ7eTTqUvhHqo3K4bpZ/qBtxR98hYRJH\n5lLvXKjvQqtvoG2F5CNvNSEl5jtQoB4dne676hJxUzcSQBfy2qz/xN2AhnqK\naAWvrLiYf1iaLUe/6zvLOaPjRi9Uosq8TmtlAA75UOJu1hQYrCHyjgzDDrxd\nuE95\r\n=J/xD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVw9qZC3ouwhXDSPnFdb17YeioHpqPSo5Gd3Wpi0RJmAIhAKQ1x3ZH5+XQXtVyQvpQ+EDXBD7gEHVq6+kkd02xZXQ2"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012_1544761025846_0.6055620654027849"},"_hasShrinkwrap":false},"1.3.0-master.20181214204840":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181214204840","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"792fb2b180aa4bf73a4bcf39e91ef6a14288986b","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181214204840","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-HwB52DbT15CqrG/D0m92znaRjXRt2ok/yFn/kZPAz5SUlIAKfPPmKE3PBHoH8ROkVcV8qLJbDWRXKkLZ76JmlQ==","shasum":"173fe672a75de42c74af5f674aba589017800b06","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181214204840.tgz","fileCount":91,"unpackedSize":5130815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFBiQCRA9TVsSAnZWagAAPF8P/1oy6pB/kadK/hXJnK8h\n5hYFMLZHJvHvENY0Lg1UT1tZ+6aZvM6Uh2haqh47ygm11BztB0PZsOGFjDet\niditDa3FcYdBsAEXkJu4UgT3MUB0/T/QA2kCXYlZGqpqz79xwPp5hDaZ2BIj\n176FyFGw5bKfS5XBQg4FlkH9dQT0IZiieTsH3O7vBtklkdBZ5QxXDkxC3/6Z\nZlSjTMwRwYKeNhv4WHwkILarbOfNUO02xiYuQQb6g9v3UJuwY9cudafvNr4Y\nPeKG8me8NVMSwG2pWH7wGL4HrOUbELKOLVUHQ68G5In8v2S8k+aaN/UpgY3U\n1alcu7WN3BPfKQNFh7dE9yfU8cp+iPvQR7ZiZD6AfDcWbB+LGOxTlt37uuCK\nasXnNefqbBWvDwlHr5nsd6VVXVdzU1DolYzS/ysJxgCapAB25z4ApopdV3Rt\nBbPVIdmR6OrsV3CvfEJtaufDUaLM6bxBZKnwNr+wwaK7wpzSyzqG2ORzztsC\ncBjZ1q8rTI8xsdWDjNJ7pApqWUqkwhxcrH9uWkyQ31UW/kQnSFDh7K/NkVXI\n2CJz98VQko9GJvujBbdVa5OExLZImR/G4qny2rBoQcd/Rmpg9QqbLHcpFk/o\ngXZ4441JnICroRgxk6D/m2SRXvf1WMvBqQ3W/HfVxqiDA1cqHN/1fOFrN6RH\n+PRq\r\n=gSHU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGBdlxEQpyyHZkdLQ2YKLkWW48OGKLi3rWjHKmuUYjKBAiABrDh0K+2uRQFFit6p1Ms0wDLSfdZdPigq5zWc8dsFqg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181214204840_1544820880169_0.18205714065104917"},"_hasShrinkwrap":false},"1.3.0-master.20181215051253":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181215051253","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"eaf161004328e53131c8c865065e360dbff44a12","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181215051253","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Iwpn81qfKvyyHTOwKbqhtWw8w6DcBm4X9tFphwzYBhj1RZ5/zW3PzUcy+o7iOwMhz8ktCtHZl4mr6eLyeML8+w==","shasum":"a7fab186d8759f614de76a2140a7756467eda2d7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181215051253.tgz","fileCount":91,"unpackedSize":5131819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFI7SCRA9TVsSAnZWagAAPVwP+wf4mwxqAHFeYbS1PYI1\n+bmiQknygOTDvvQP1O17vnOGCQJ/Xn3gswXgEH6IccobVpuGidl8TsIBC5pB\n9YK5sy21yrp3knh/Ty0jf4GQbm1iOzHfTkhFNrcATVXW1Gu/HUu7PJHYCwVe\nYJel5OhHTaBZwnL1lF+REBOZYLxmWsjS3SV20ODyu9SdFk5Hgr+TFKTn/NYy\nw3zqmLD02/haftoNuk/IQGYgEsoZvybdtKBJpZeleh/Mg46EoKiDWMh/staW\nSUKFTSbFh+caaKCGEV850cbOq6ws1iZkeXsl2Hiih/kekIfqlyIiTuZwY6Ib\n7+FCpLaeacj7S/ucOsFziMLUbhxWez8Hw1o9T1KxYtE9xrUak+Pr2ipKH7E5\nt05adGWx/yzeRswi5Vc6+WUK+Td5Y/N9mkBG34oafzV5A0TQAn5PJNH2MVn7\nMxzF+FQt1ZehDLp/k68OrjW4BfDfD2Hg8iW5L4GILINzRIq2SCDF3XJ/Uqwb\nKfCzp+ZBVbOMTn2/qjmq2GbSGXs9V4MKpC5DbQ/Lk19ZUCdhnzdhjv++JbJ+\nWlLoDy7jHYEr1NQGJ1M2oiDYu5vTHFlsyFWAI+TDGIe4EHkAVUz25J2xN2tB\nCYh+tHRNiK2MVlw0NcaL2oEdd4nGnmUmwTphxjhvTtsBddbDSILRbGouSOXT\nNv1o\r\n=PHho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbPKutAOUnt0qznFhAPUjRvfCUPxkQT4vqZVOp6PQ/3wIgSzxxbK2egIMxtTJ9NDALZx00BGhsYaLGFCqhUizqsjs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181215051253_1544851153469_0.5575640103491115"},"_hasShrinkwrap":false},"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"956fe470398ba3332510ca7ad0b3ff9c2d330647","_id":"@atomist/sdm-pack-fingerprints@1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-mvOLcCSk7L+oruzJIfN3/ysGbkV+znjfgjkWtgTboJUvv3XqSzfpAvA9koy2oNW6TUej65Co/Z5SW75eZiMDEw==","shasum":"a2dfcfd1b7f33f54389898deef0e894ff2072962","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415.tgz","fileCount":91,"unpackedSize":5132929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFm+5CRA9TVsSAnZWagAAEJAP/2ywPS+ud0VgSGJdPc77\neWQIBbgsOidnBvAxVI7oN0nESMy7zNSyZJzavjcILZRLCes7OJKwj/cuTLjn\nVNDi4BNMc2pNGMqeYjapWS0jcLRzWc8NJSiwIeQYQj2LhF/h4i7+pW80Jw0p\nJNs7N80s/zuH0Sl1JCKYJMfyrKL25L4ivqV3/j6LhkzOQMYnNpboM3y3/Q8l\ndZAIlDVsdHv33WpV6+MclFri7y27MU9OYYLj+Ba68gP/HLjIqoy2otQIjCNe\nVZaFP4KgiAM91W6IFiKTyHd9MOyB1tlLet2Hx7DhNj2vxOmitoitZzbr1prq\nI2NfuP23FT4h9CtFxIbYX9hCN2R8686Wn0lu8PQNagM+ETvkXEhuOBV8vp17\n4RyhVVfoUSVtlMPeK5ljbRShMPaRzF1fFgZuKToUMQqAQqzw4di0XlSZbGHx\nRqsTYScCxvTQkbmSBmISe/nmupwvJvCQxtWTLYExHK7IbOOGNNVBcDha6shq\n7TF1gg6YWVjaov/I7M2+hymfaYoYHXU/3NijDBkL4Ugm8VDMyHv59g+6dm0S\nZpkRs3OOAQ+sTITKjTUB2rr0eJyqiXrXHhWeJr3D/pBMxjIBrmi+Nm8dl9vy\npWaMeRW6g4q3qLCxdQqrCA4BRbaF3M2oUK8gFuYypkSi4zJVCfkUp/aO4yul\nmVl1\r\n=wgCn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHwBQN5cgw9Ef0dsWkknfLVN4hcBlTQzcVNNrdSyaXFwIhAI8a9qSE9eraz2vhlsQKfnVgvphIZDi8MLmeO24RKi1+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415_1544974264840_0.8657131280259429"},"_hasShrinkwrap":false},"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7ed8d7c507435c8a3f6b86efaeae4dc82dd63fae","_id":"@atomist/sdm-pack-fingerprints@1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-+EUdZMmEbSocNVXddf8P0vE6LGY6Trb6Io293yj75tEHX5cevSWQM6Y9wzTKDwtrkhG4gAOySNDLNnttCPa41g==","shasum":"cfe7dd0493bd502e12b9881e482c028c746cb2f9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206.tgz","fileCount":91,"unpackedSize":5132656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFnPcCRA9TVsSAnZWagAAensP/jRW9j+5Uah8/PDbAH9e\npHvfRsokrsoRK3ywZ5qRAGp3mA6wXtCeoG0d+efmTD32eB9ZLmsNec4wozct\nHTm06tGdJGfIk+eLkDf1YX9STiRKK2rv4imrnWfy/vGXF8XPWmuvi6ASsAGQ\nKYqkRW0Hj2rDhhPrEsIh9RoPCJM/SA0VgAYqD/xmcGaxKF244ICprishuED2\nKSTohdlKEjrZnxp7fUeECHmkXZnYPnXiVJI8OWYueMr62LcbI7tECdaiR8mv\np+CGvh5BS4u14lHV7i9YAewhvQPBxAF5ijoU5/sfhel3Zq47T7L/p4mx3DzE\ndAOEDzM2X4EcQTTQsyuUONaLDjnYYFQa3w21hXrUxY+SjRhEHTgYjE5Q6FfR\nZfQ4SExR4JP2WFeCm5t8LTcnpFTZ8SZ6ecmOprcJm2yfYg+nnd/vHQjzyB2M\n2HggcmNKprM9E9xC0xDr/g0RKkryX5jbjHo7Ww+EMQh0eNCPKwqM5LdD2C3n\nkkjsVjJ+Xzz+gvePL11puRJaKHGR9PLH5pnaifeafkOCuHtBYnr7vDRuXjY7\n9sepUgTmISuRchBI7FRdKa0G0X/jTBz3CQKkG+XLyOhvivfkasASP+U3Wbpx\nUYFdIfPXy3qkahJy+XAqRODmgzJvrfyXCY4v9E/SueoItNxvYlbL1jZ0QGv9\n/noe\r\n=lh+w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG/aY3/1Qz2k6GQw3gLJTMID9SJwOyuvRCU58Oi+83YiAiEAoiLb+hXy7CgdbMZ6nvo4XjrTs4dO+DBQyr0hw4mcE18="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206_1544975323606_0.8462201711720656"},"_hasShrinkwrap":false},"1.3.0-master.20181216201853":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181216201853","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"580c60aa6a9eab9db6c49b36c6680742d5e007ab","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181216201853","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-xY8DIPbzCmBZQcFOfQmCDeEd1rWzlLSaISb+WG0llMX1vxpzgtubNjUnh01iVEtnVLSYn0iUA1DrjWnU6PvkrA==","shasum":"3061001824ae31ade6a67293d33fd738a6ef2e69","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181216201853.tgz","fileCount":91,"unpackedSize":5130924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFrTLCRA9TVsSAnZWagAAje0P/1R+GX3CMInPEb9Cehmg\nSnmDo/Kw91ostsYHGd0SQkC8PLjBGalxWd81FvRpF/MNC6QVUFGPkzn1EgWp\nX9OzuUaXZ/TTl7l/lFG4bsBwcVoLZRLHqiggUwWh8OrptgpcstGb8HDBoyWc\n5lopVXlDZAu8Hv9YsjXMI69qNVS5FxZX/zpd2ngGMdAjnlPW9tVrtvL9suV6\nJl21W6urPt6cR+OHaMxJ3vcw+Uhg1nxK0zHelFF5ZefPk+sCu6GQpTnL5Hld\nSWmDsh7FNHyVGmq1Z7wHV0o2/6tmeKN+XtB85qNHUOOvTgZFibpZtn4h4Mq2\nrIsAawnpPeghCTEh3Or6H451TP/OGlm8pESeF2DOrY3F6So19oVxRsMXcu9J\nVu+G3AAIVl8lXgi+YJzRg3gW77ZIUbu/z3iG7xmPAgmh5NuTBpwHzTdbastn\nNOkOPD7sjd92T6zpDLopCRUrUjcOBvEFUMubEsGPqZ8mrm1EADEm8j+JS7fx\nxvLMZUat1H5g+mKQPRlECHcJFkKP02nHpnNBudHq2LE/y02YSJBH7NPyz6uS\n7xtkGae8oX8hGXoOJUE9jlVxBQfwjHUy3DycVXUJBya6qcrI+52+GmT2pI54\nz6XGZ3kGxxlIa5lbciS+V8V5cltUnLESE7+hETWVP0lh1vKE3y8OjFVvLp/J\nRvFy\r\n=0NTX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFhoMXzeTzymBHoPh3UffQn3FKgO3KhlEFaEDpKLmuPuAiEAyX3Qn8P86F978isYxCax0zT+4N/ofY/me8AQd+VT2JM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181216201853_1544991946602_0.721903045468687"},"_hasShrinkwrap":false},"1.3.0-master.20181217050842":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181217050842","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"f92223290f83702a06b8b1308ece593ee5584dac","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181217050842","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-bT+sjiu/hEwpmjE/HLRojl8+D3tG0Hf4396YYA0sEtevkVtl5T4q08U/nznbfTYmT7ZeLHFvUKO3yCOz1+8HbQ==","shasum":"982a354c99e4c8ec0e761baee1e88fc7e659e02b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181217050842.tgz","fileCount":94,"unpackedSize":5023297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFzDxCRA9TVsSAnZWagAAOTUQAJF3uPZw5YmezqKZW9LC\ntJ/Y47seuQBHXgoH/vFRWhmxK02gYawbIw/NmFfLX1ywyFFzxhUkVl+CQp9S\nxt/9cIQkuUyW7dZ9E3QrxQ9Ya5as5c1HTavSE+oQUtpOdsYw8taFhrKwiF/O\n+jJUmcHM60qP7W0Pv0Oz4H43CM/5YE+N+YwP5bNE0HpSviURsC2CXFogItYJ\nShiARN6+HOzdruJNSiGQVNYfOB8FV0Tv7aXilpulBTaVOJIlZde6R8GZYI0M\n/KPYBUqGDFnJmpWM0CUjo/aQb0Epo4OT4bwCsNHUjcs85LI5W3sdsxjKl7pf\nN0Pw4B2NKr+9F/9BQQaPyeyXB7Qq3EKlVvgqmPmXoctd6aJAItAu+8LHN9eS\nnlwYEfIwFFxUxmGeUx+mqsca3xiKQR09ajY9F+XEEe9HqMvL8zC5q6cdYU5K\nVR23tdDBqgPqZg+zoWtxroDk4JDRYSqUsjonUKZhVB4Wkh63kiErX5JP4M1d\nWgCUsAEJiIUJObYf7CsUudzhDCs5UdL32kJVAd6MUzKEvhr3cgmN6ubaG2Fa\n4MKX8Al+YZLOtTo+qdqHMRW+ZAY4npJV3cBHl1qozzYPfy1EeXfMwyz+cI/5\nhJm3Zpv+rf9Y/taviZMawvehoLNN37dBJtfqOdE41e5IHFkfm1JWUBRGja4J\nHJVu\r\n=5xuq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGT7XTHA+QawLfdnH3m4JcFCJVDvYbtVSquMbbDB8AOAIgRz1gOg7wXnGesUhqKuRar2kfz+sod3gvC+tJSpvJ1pA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181217050842_1545023728736_0.18166975849337397"},"_hasShrinkwrap":false},"1.3.0-master.20181218044239":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181218044239","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"18282444ee1e4614567beafac245879eca4db2c2","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181218044239","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-+gfH4thzWB1dFseIZIucxN0fnrPz3WQk1Zrjbc/mQ2VoCP2y6GpLxMxVxGnZ5RpfJ1HHvG+JSWE9usilEmmRdw==","shasum":"f1413687fbacd91f9a2ff38b5d5a245415dfca1a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181218044239.tgz","fileCount":94,"unpackedSize":4931376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGHwjCRA9TVsSAnZWagAAP9AQAJpwnbcW15LQABuhM4nt\n4NpwctJ0q0dglljAa1c7pACAiJfvvRwIweFLAxcpDZpqUjCpG5odPxK3gbQW\ndDzY1unCa79oiNw7OSRpFzc+cTI1Xjb5reoE8ltrldZFpbwy/s9YpW5cNAtw\nGJmC3wJJW1Y2eHoCgl0rsLeJ3D5UrzbYPqAK4Ssu7bKqP5uIy7+XVWJ+sAt8\n6q9l219A5B8SsMAOKjrr3cs1u+CYicHiqHWIaLPrFwQABqKgoQBedoa9VT/v\nxLULEN5lwrG9wB9WQjekEhurjX+WipvjoSdB4Ca4/WuAKiNlBaEiX1PMib6o\nu3t3vREwe2kc4SP2qvXDx/p5eac8EM7dwXLwHhtVXIO2iHxSz25vzWPjv7uV\niE4a00YLzf+BH00skLO5uinZNaWnB9sXo17D28P6xEzoTfC/Lgk1HgAl1x7/\nc6n7gSlwDXxrOUUMgPdEOsOgJ6Kg8IuO0YMn8vUDknKmK8q/+z16zNR00Q/L\nLtkiTmhVx4o1V/VPoRwveeC6StFlwSgtre7UnYVEovEUOyEHfVHIWeF44pzV\nN8WcHXvlFdnBCK562eARHKxMejn3yX4vOSSLHEHeKlPUuHGPAcwAsWl2hvFJ\nabliHJOVVl65beQJF/zp3wLvOphW8qZPSw6ttmpgX8Qh9vTbTZh7mew6XV+g\nDEkV\r\n=xJz1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRInWpFrWBCOrOogCn7jben0jFkG4ijQtbz5siZyRl0AIgXyDSzCpOcwliNAeU1Qz+iVcHVf4UZT15jiZeGs5UaFc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181218044239_1545108514404_0.14018790462604036"},"_hasShrinkwrap":false},"1.3.0-master.20181219023944":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181219023944","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"225b58b4f8361f3c80c5c21e40d2bda4042a0cdf","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181219023944","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-aicUbazrkQdyeK6Jfn7wzpoCKaHNaterLifqRuf67a8tNuhEprCw2xcKeLzMIy27CcPgFTsPHvRp4yk8IJQkHQ==","shasum":"bbd253664cbc61d2f6bc26a9c4d5cc3f72a0b9c3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181219023944.tgz","fileCount":91,"unpackedSize":5039051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGbDiCRA9TVsSAnZWagAALyAP/i0wDajlyvnr2opruU2p\nE1kAyys/ZtmNuy0b7MI53c17XZcgEMkCnFfe9kVH7ltSK/9MuIND1JCJhph5\nX72bd5SiN6Sk/RCQRr/MseSl9Q+9zbqEv8NJwlaR8rcwk0+BKtLM4Iu4KGTp\nYu/0MkOUxgDUooC6mp4vsZz2afCEo+rtQ8Dpgvk371vwdAAXr108iS238hFP\nRTfpFGfHSX4ylGlk7lhw8cbJX4vH69LuSyIBhwpjpKC4c7IgKsNzKl7d5QUp\nV6CJSpgf/gW5BOpJRCSdikzVUEf/Ysk+N/jNnIODYbkKx7BoRhprk08HuHUl\n+KIn8rJc0r9PXBX0xvtGEILiqKyMSfflU8Tva65xJ3Aba/enDH0VTQZxYzGF\no4ayDyTWGu0bpgasYwKDo5wW/KTyrjSWAhuHWcp0I31D1nJhxtbMil0UkhGF\nDsC0nTy9DwOKE1kG3EAzeMPoCb9WhR73BK+VkxUx2p7q5NR6JZ+JxPOd4QSh\noFlgt96E8N1/OKEHjqzQ6hYCpemyBbXYkxMtGWKALs/QJyFDRCAh+9ayEF75\nnptXvNhclJIDItHdSaeQg0YJf54lT2wibtb/Gy7jbTOhMJ/6dnQk91JHgJ1X\nlh8bZr6NDo9NrdaxUBsNQ9RiRV79H/BQuC5qAsDZqZhMQ446YNWjY8GDthaU\naRLs\r\n=RxFl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSvGp3vUKmjzv0D2BHnZVjNNtXTQWInPn3N4GREzEKMgIgF4zCRIYBxyiZARcuUwZZ0CrfEguDBMlpIolM/ZYdfQ4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181219023944_1545187553727_0.2192049229368327"},"_hasShrinkwrap":false},"1.3.0-master.20181219025119":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-master.20181219025119","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fcf5a2aa5416b1059896a98057c2ae6e76fdbd0c","_id":"@atomist/sdm-pack-fingerprints@1.3.0-master.20181219025119","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-XMuhnYULqVmAOHTdAIgDDuLnw0w7mYaY7owoF7kuwRv3zdyPJXJdYxHCEv3KampvOSYYzEe1EriEQxrEqEW3Kg==","shasum":"596293c6d41df3c4bda4edb8588a951e4bf19273","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-master.20181219025119.tgz","fileCount":91,"unpackedSize":5039344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGbObCRA9TVsSAnZWagAA0SEP/0LR6ShAozh4RbKAiOcS\nZ1Z2IaeU8ssAEv2ygBSddpqD7dUx+y4K4HWoqw9TWgrp3tkUXtxDe89aNb9C\nNTL31kBSWG1gY0T+jtpcCdqwCn6qKDmPBnJ6x9CF5xVjjZxiSv5I082Bb2yb\niWQeKk94JzXFSufwBOWLJQMAy5y6G/m4ijg5Gei6albQmVu/ds4qCiSKhgvr\nm9zqB2ONkunsWuVbgIkIaLE4BZqwoOy+wZKkDw3RfMJsUoqaYAWYw0Eh0JjN\njkQAH/gml6G9zqOUeSzBZ75YlshajENx6bfqm62wTbAGxNjXlW4wUhW10V+W\nCk+7zS3oXDApC80AKiajBwuSgeG3P3XsBLYq0lzruxsw4dTVIin0kyTVItk0\nQevGi+ieR4mlM7RBqk880Ol5fNwLLmn29AT1AszgzkNWRxnaMP++AEWYLUFP\n6V8Xx+cW4fpXqVoWmi28K0Hkiko2/Oj9q5cnePRkmejoWsmeZclirVY47JD0\nMvZ3Pt7uNUUkMZFutGW0JTLl+5J/PdlaRlIJABviu6ByusSUgFrK3YChFeoe\nojmy0r0BeVJYnQBSRYuisBImoLMUwGjJNxN4kKC2OYt5uClRA9+vQ9ORodwI\nYl5z4L43sQc+rt5onAxVxwWssVUvu5OI1FiT8CgEYrB0nqL1jE01lMdK24Hu\nNEJ+\r\n=flXx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBmZ4NUHQkUwTnhZ0WL2UTBvsxx281Z3HDmIEUm3/9LAiAcqCpoztqHXncE6Td58Dlo9ggrSjVcDXysJQOdJurF4A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-master.20181219025119_1545188250573_0.027762656152588328"},"_hasShrinkwrap":false},"1.3.0-targetrepos.20181220011950":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-targetrepos.20181220011950","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@atomist/automation-client":"1.0.0-RC.2","@atomist/sdm":"1.0.0-RC.2","@atomist/sdm-core":"1.0.0-RC.2","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","graphql-code-generator":"^0.8.19","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"2.9.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4d3c9b34704737c0871304b9964510734643295f","_id":"@atomist/sdm-pack-fingerprints@1.3.0-targetrepos.20181220011950","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-MHx1vw4QS53bHsHZUHN71LcO0SoE8D9UxXeKx0dc5n1PJimGDSv08OuEuufGeC7vwVcJrQaJTDdZb92VtP0+gg==","shasum":"e62ca157ed6a638dba23637703fb507036341b41","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-targetrepos.20181220011950.tgz","fileCount":91,"unpackedSize":5038443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGu+ECRA9TVsSAnZWagAAEz4P/0sRnZF4lST9ueEXcxc5\n3r7akRW4lN9huMND2oDFIxHo1CgyypOmoB5U0o5qk7gATwQJakWgdKy6SJ9Z\nXA+zsNu434L5+ZPKUgKwGrse8cqmPX3s3QFamJBZMKzG/bXee863ZtF/jzce\ncLHLP55S9upEBrZJc11s/t8TfMQPJFLAwbIz+KgMWrUcVWTBADqAQ38x1MSS\nqUXfiA7D8VyrqvOKJzeBc8PUIGlv/Xna1UmX6xIncZF+IM6tM1XcmjSmY4tf\nHGG8YJsDN/fuxyNDYKjrWbUQSQQU1dnZMkQ+MPfAkusBkVlH0Ej8H7QjSPSG\ns1AfrONj6n6uASYJaE8n9xjgYap5oFkXA5z7ZvSfuNzPG09Rgh7ACJ6d+iWb\npw6GuzX69KKtKwxyTaNrkM0ITX1sJdkFvuzKooazVdVKIhb7fFP926g8Y8Db\njzgOwlwUUMU+aI8r8SPdGBdE2ZB56Cb0PVDipUG8jMmiZ20P7o4KwftfJC81\nsvS3TB1FU6ZLXSKdXBTwVq33EuJ7fBsc5q5IHqaSFF0VJeuvzFJdYFZAx6Td\nKbpDy6jK+d4A4LRDpIPEKCm/F7asItkDkBrSEk/qL9lTyqdlWumQED1khI5I\nVRehDxauNXyRkyZsFKa2HYIZoy5Tu2/6Hin7xRujvXXi/qJwZjLAgrj5fMpF\nPyZ4\r\n=h56G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfbK6iP/K9lZauuc3THAgpSymRRbsbixnglt8wAdA3ygIgFiQca5JVeBfJZvHgYcKolvmheWYw0z7fZtuebI1rIcE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-targetrepos.20181220011950_1545269123546_0.27514465074696903"},"_hasShrinkwrap":false},"1.3.0-targetrepos.20181221013736":{"name":"@atomist/sdm-pack-fingerprints","version":"1.3.0-targetrepos.20181221013736","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.1.0","@atomist/sdm":"1.2.0-master.20181220184732","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c7b8f5c3ebc58f32cc38d710de1c002da6c5d129","_id":"@atomist/sdm-pack-fingerprints@1.3.0-targetrepos.20181221013736","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-upNCU1d0GQc+VER0WnwTHxh36jAYwh6joavOx16bgRUE5qOe6P55DC0eWyZwgDYw9PvO9I7AuE/mTDzKfyyMKQ==","shasum":"10d6263395b2b1f28de62686a2e938e8d6672ccd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.3.0-targetrepos.20181221013736.tgz","fileCount":91,"unpackedSize":5182316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHEXFCRA9TVsSAnZWagAAKhYP/ij8WQ565oebszdn1iqw\n0u6SIJcZLChVsOPUkOq5CvuOlZ8S3T4GLAwu3qMT2BPRqqTpSCn14+BlNZ2w\nAv6DLxugVruFWfZ9UzPO7b61LjW9e7VlvFmI4LWEAFHHUOYKcA6oh+bJ3++3\nSFoAIEAZEWky5dyun2QZPDatsUjpNQfBxTUafAPFPcvdhf5WQewqd1X449Q2\nSU2w5gFXO/gLgE6nBzh8tCKcGIaeyQQnabukozTx4iwzVZnsSFBvD0KZqG/Y\nMWEfRR9v9AMquJaEtLDNiZMm31/AzVzx2q9Z5auVoGESsUGCWI+EV4lYxAjF\nhkzl87FbmL6+C0rftJPKKniesABNtUJ53pKJwsOZP/ATig8iUtYOYspZbZTu\nRFsKcQxZYy4y2RNzCGKog36odkSTuRQEJvuySikusCr29ry5dlT3HJqa+0RF\nJlJ8glGoW9URdD6eAi+7ni4iResQ2F4nPPHLsZFUMe+JULoDL5JrsRMY14XX\ngQvcfzIti/glT1h+Ojr0oh9DvM2fakTQcGkXjcnzlaCpoBg2iIMf76RTj9VE\ne2o59jEWuIE+iRnKHJVSEIxvNwTyosoHUQmeYiKir+fATCCeG8CmVb7Nzz5K\n+Z7PavNjkO8B/Vlp2IWP57K8lUXmIVZq+9Aj4cUvcuEV3+WtHo21yrJqq3js\nq1HJ\r\n=KBJW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIbUPihH1auWpBYFy/t2Ukfv4FMeC5L+n5AhJuKxyApgIgfxinzJZtLsE34CzPdGQgCof+2CEJHGxlCHwp0t3oHfM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.3.0-targetrepos.20181221013736_1545356740228_0.6277497584788416"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181221014203":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181221014203","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.1.0","@atomist/sdm":"1.2.0-master.20181220184732","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c7b8f5c3ebc58f32cc38d710de1c002da6c5d129","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181221014203","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-BTdfxdBbkNq8aw1zP7s94RCtLyXKd/usd+gGePSlbJg103D6/DhUB8Zp6S1BFSInVhpLrJvxxhLZIlCYigt9sw==","shasum":"3fcc4bd4174810696d3ba120617ea97e5dfd1074","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181221014203.tgz","fileCount":91,"unpackedSize":5181883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHEajCRA9TVsSAnZWagAAntUP/ic5mS+a5LFLgZvnVqBg\n28mNeAFM5MbQ8wBhxPZdwxXDzqDiokB5gDU4Ana1UtFhNC5a7jsL/XhhL73E\nqhsYSqM2C6HqUUf1VS52oSZm2qrawuMolsXo2YDFDOdC7Fj7b5WOponyqZff\nfRC4ySp09juXJHY6He4INZhtgSSKC3bAdLYgPGPPzj82O6vtet20+gkWguX1\nQXXNHrQFyO13Rf5QzDIkZQRGd7wCd8qIh1yibMN1OUgOUajKU4I2/Aq2Ujwe\nccsa+SwygllZbsWIT5/r6pjBEnoMIeyV821HdabTbCcjXLCOvJlu+4kt7Tpo\nF/5D0KjR/OdtS2DlBpSEUjtkxHOrihBXUlr9z+5QqF5My3PQE+mDszwVuwtO\ny0mF9mszO2rCSwwEAF4i8rysw6xjgpE9liTwqYblRlGVC1XXecX7ilaEmsJx\nPIHboM3jTai9OYRS5Ltdhy3lNJrbJ0FlG2RqVKytsPQ6D57uXTRprTDUujX+\n61efVVyp7bBHudOUmfZoSXI8jKRXE6JphpgoBoKASGNdWjHfQCEWkwKYFJ6m\nzbLzIAwuSjA+c0XAiV4IEVQweIFKpMjZSb/nzOJueY3J4qwrSW7icr57/Qvz\nFmkedvxGVLn+h0OjgX3KxkTadJVlb1RVp7Zh2wH7+ykeX3BwddIRwRmH9c7T\nm5B8\r\n=4guY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFjx6IoKRVHZGT1Q5ZnmiaS/gRGNhSM0dDTiA5FA3POwIgZCQ5adelbHEXf4WX/ngCio58NTR6kTd48s0oWChXtN0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181221014203_1545356962558_0.23561719268345915"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181221015708":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181221015708","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.1.0","@atomist/sdm":"1.2.0-master.20181220184732","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"486a6b6ba383adc84d4be79e230dd5acd37ea389","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181221015708","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Q/t/n7GxKqn6/eVFnsp5gIDsWrk2yCWW0FAeIT+dCdphWRCHclOgNBtkEkMsAv0lj/Qi8HKiCt0B4x0nRLtHuA==","shasum":"fe7ea36bafb2030f76c32e5f24d3d1ee2d3a0f4e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181221015708.tgz","fileCount":91,"unpackedSize":5182668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHEoqCRA9TVsSAnZWagAAWzwP/iG3mAcgFjq2C1/Egrp6\nPES6HGpze7AUCAYekyEEaGgl7T+qkj55G1bdApFnhJepGE+9vDcixyxLxbOG\n62TMvd2+VnI+5RHLy0l6nhl+awS8k+d6CS3SOPEopt0o2e875SXEsPVFKlhk\n162JwJO4omA9IJ+0k1KJAsyIxm2wSqV1qNC+FH1lthLPnFGLa+OgXBq4Lj1L\n/3TiUVVCPSj/NpVYUaDXpokgsv7ZjClUVv2Mw1jy35PW21q7u8mZO+gCozBn\n+eJAHRMZo27NVAfJWkMVFavW10cyZ+5f867D35Fx5EXUftQUtX8pUGFG/gDJ\nnyVvo1LpLrZDWfnQJXdEH5MawdGk2rFd8RnILXe3GTI2q/9MgRbtfnTsLUF+\nnmIljSiPn3mlN4EP/Zj5FksqNvtAjQ/LEoqNY0R1t6smKpN6OgQzd2sDiMNo\nx9JyYbtW2ZbDopc468Qzsu0Ie97lzC/gfSWgJQHMJmc3n0/dHTGngyrohFvF\n/te48/mLsXsyVnVjNZ0B8l83eb2unyePvdhrRbz/5BlUw9tUSFZuJBn6eMLi\nOQyqqjraNp6AZapJ02b8NMJKf5Jl3Io7l/UlXLFZ7YEQ/iNP1aZD+zDeZ6bn\nRIhnVpnadrSIcOymh8+p1zJXJGAllqZxxNyZzqttQAw0Wk14EjDJX7k8/OsW\nX2f0\r\n=W2Pf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsgyw7XbbhUpgRJyTxU7YqIzJqoKkld6XSzl+HWt/XEAIgfR9B1BRVNIKQ9+MzhxZFEnwDn3zh19UBvZp12JVQei4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181221015708_1545357865342_0.03617900707162347"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181222013209":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181222013209","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"902b31f632aa4613a3cae07648a9204bded802fa","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181222013209","_npmVersion":"6.4.1","_nodeVersion":"11.5.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-M8meb0u/APSBxvRtAA66GuSOhL+/e/7bzEMJlGMQNHpL+4h9sZ6KNf/REga8aRHd9qWVkC80I2yyZFMJSVloNQ==","shasum":"fba39f7c1a7876d37bf68cbb98a46582bb1c784e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181222013209.tgz","fileCount":91,"unpackedSize":5183632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHZX2CRA9TVsSAnZWagAACugP/RZy0s6mLu+iHe4dUnXp\nyG1JablEUTa9t72VcHLzag2JLuA2WepGkkqToUrB2J1WJa7CCgZGtAX36u4k\nc6J575k9tnKXTAmlKdBG45hLDomqiPfadEg5VLEUc2wRM6dZrH7rD7auv5vA\nEMV4WLBIrCIUngv6lHkWNEHQobmTwr9kdAqTDAi+E/+ajZz1Iv2DJw5p9ss9\ngMGjEPfoOyUarqUE8wkMkeRBUy0HCzPwbN5XUrigB7NnenbiE7N+wtpmlrjJ\naW/KO6VTupvL0tmTewhKkFEM/ScPUv+nc2FN0/Q8gsDHzMoZOhov4jKiXdYB\nANfJ6UH8x/bJTFVuXXuWS+PNNw8GG14PT6X7WTUYad9b3tnKX7E1KU24usGK\nJkUm704GSNJr7Sxu+EGuSbuFSOW0qz780hq1vFQn5YRpZZQPonlSpWXINTRT\nEaUGzJOyVQ9rNcQ/5SCy4lKG0aRhqh2jFXhaA3/MXupCYDxJ9D8uRf8aKE/K\nuxdZS1r9Ek8nP4dKiMeKeDOkhp0zB9Pi4hcL4E1GLFFnoE1l/9lFsZDabQ+1\nxPbMekIJCccPBRg1mFQJqXezgPWblLA8R157/F8vqp/2aXrZNd+AES5q65R+\nJtuQq1ztIWRdf9TjhykXWEK9KghUjg+KHFESPTCwzryrRzzeu+wxHtXNpAnz\nftz2\r\n=m3Z0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDtRVJL2baiCeMNJz4mPl5DmTB4bFoBlVzzvjISp7eHmAiEAiX8RrXYd/aEzgW6vt4K9n/Pjg/z81Qjg9QM8gQOfeyI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181222013209_1545442805732_0.0013129149728821066"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181222015221":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181222015221","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b88559f2d8d41af4690b8f4a19de405bb7c7056a","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181222015221","_npmVersion":"6.4.1","_nodeVersion":"11.5.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-LOTl4aUAHCsE7Ws1c/7HdsBcllkcxsbznbhj0YF2yhTGXPLXfMpu2PlcFVLqTALf4RInp8WAKNNanrEjsxnDFg==","shasum":"c08a8671f90455ce58c7a83d8e09bb3f49ea54d3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181222015221.tgz","fileCount":91,"unpackedSize":5183488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcHZqRCRA9TVsSAnZWagAAnT4QAJnarE1Pe8Qu/ukqP0Fk\nGDDl9+JFBDOzd9ObgnA5zW63xbJMsu9/1GwCUnpUTBbAf8ovK8ZU00zhW1Ep\n7FEsQPfeXE4YxL34RrxLhIuKfJHzjhKS4Aqo70iftdt5otIrpNWetGUTt8ro\nkbtU5+WnozT9Txi91/ZIzSvki/ZE+syJtfskC1k+lru6WFL62ftY0jq9CAt+\nl2KkNutIiqJHypNEM67aX7vf8z5oBfeddw55JAIqUoYzXjVrBHSkAEKs5w8X\nCmHHVtYJGzIA/7rjWkzVToU8iVOf0TIvBqtwckbvfsQqN4vIclT/jPnbIvNP\nfs8sRZX+OZ3m+CQVIQ0cC5v4xfXs9yIiBYOCWR8V1JGE3s8ScqHF7T+beaYk\nYzw5gqoPo4Z4qSm37jEKCggZfWT5RaiRWli0oq2A2cH83WvL+vHnqXc73Pdi\ne1yyI7roU9iOEbHDOCb0imayzUp/s70gEKwSEXETTLdqfWx/khkwkCoQRdYX\nT96/nUFOpjmOWhSmnjlh3IkxEskoCxHrfCQg+X6/gsA8s3PRPbkI1LqcFMUM\nETYys6685ITsz43hYsxOFfLrJ5i41QWUB72zwESbx4BmVRQNv+jyFWsDbG+3\nrJVnSnMQVogRFJNtRco65WyXAK1lKbkqfESTvffHbXMXmw3SGeY2jWN2Bhir\nAIaK\r\n=lsQv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqfgKRKEzApOgthbY2+VghkHacl06LBbT8EEeS8mLEMAiEApd7o3TJODLTmvOOBM9b7FZZuz04mBXPFIh3OBthLU0Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181222015221_1545443984525_0.9887132680703954"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181223221742":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181223221742","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"f113ff820641e62f9e2cf96dc5737ed3e81ad8b3","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181223221742","_npmVersion":"6.4.1","_nodeVersion":"11.5.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-OH+X+2O6LDWo/ZCj4O/DxXXyVG6dw2boEirOxnjfAcCrlxh3FbWaXik8qSe394Rz7C3GpnjmN2sv4zCX5eve+Q==","shasum":"3fd2b23947af4427ad0fba4021add4988fd17c80","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181223221742.tgz","fileCount":91,"unpackedSize":5186233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIAtNCRA9TVsSAnZWagAA46oP/A7pt5ln68j/SVPXWm2k\nd1zvjTzxPkzhtlpZa+flD0GSju1yRisGMXxJRJgDkXtA4LQ0uuGiYVV4RVpy\nK9RvqxZYoG51o0HLFbaou/sdMhta9R7dgkJpfRiO+g9cnFSkalhLtayWn7+z\nT4qDATLatA8e83sYqlV/mTKvuSsqujx7TPR9bgiTJzUV8w+tdu3vU51d1RkW\nCGKUR/tiUA5lpgyzDv2ChMilQEQSBEZ1+AidlxNtWGJsdCSIegAJw5KzJBYx\nFE3zjtvKFO29mWlIMe7NknYRmkljWGbJh7IOKiSQxDaI8yyNW9j4/ZfYnpqV\nC/jPJlm4zWtvGly1dJ9OxErqyC3B9VOQxNDac7ByKVIoNf/6oNRXGK49ZPF+\n97m+qAjpLxDIHB94TZfj+VT2Sr2PcrZLe5spCaJLAFuklx081QgaRDhifjcW\n3ifH4EUt3YORAX04KZYB9ETi7+AddSjAKNE3w7IswOX07FUNN5q/JbbFJD1q\nkd+1bb5LTx48wUlxexdG1zXnXEcXibtvU4GBSQIJdceNDDUGWnE06muDzhCC\nldiegAgpbvGdqBqfTQVLtKf7lYPd6xM+kxAaEVER8xqicFVh8REJlXy9gZ1X\nR5UWcE0B/0xaygK+suhXGwIZVRLWXJPREREZ9uYri//iWNY9x1lWA06fqWHZ\ntbZe\r\n=2JSD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmaC3+ohCpLnmIWBeQWePKT3U+GqNDk4LPeCiChksHjAiAb8mbz95UMYDpmPNmFXhj8+Y40l9Qn1x47h7+6J/elEw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181223221742_1545603916640_0.06623594766005736"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181225013517":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181225013517","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"d5e417eb2c2f6eb490ac9b66945da7f758abedf9","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181225013517","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-dwV+8EsfN6ixIpHjYVV+Uznfnx97HdGOiYxp3cKmC1PQ7okyUcXyJrzFFMHdr5ITSklIrM7Uj9xjvDWDMA0fYg==","shasum":"c62b13db694dd493838198862737cb933f6c6788","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181225013517.tgz","fileCount":79,"unpackedSize":5138455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIYr4CRA9TVsSAnZWagAAtOIP+gOJxVzJzFu9NJLlLXiL\ni0RflCLd9QiRiVyaG79D0vGqzdb6NalCWavyx5OI/iCGVAN7scuTg/EsSJi3\nVqizXCxuPpsakP+FYiIf57uIrQ4GWDX9ZHdDyEGBr2D7AB4l3Fyw2IJdtF0C\ndUw6v81noxIwmp+l+wrET61e7xP1JHyvHfc/swy+KLbT9MZtmVDBC9uGZhiq\n1gyAGipKqfx7LZvNV+qxvVKSN28zVKbk6Tk8Yinj/06cTsMBorVdOBDzYszc\nOdrZp/QMcxl/HLl6xgRKzEuFP/5vR+qvChqeLLmNpq8/Y1A5zxra3LyjTF47\nZisSB0fz5cWGmi3SLI9kb9XbERluq6V6NwDto1lY36vx4O9iIvc2N1JAgUDf\njYLoQgERFhAIUnBa3cz2qaqRnsMqCSRIP2ZAYbDuGA0jHLUghM8WnnmohhVv\nN2acVt4JSRDVzzfjkZpsm5hi1bezfoSDHr5ECwHrk94qpIADQ/6fs2+/kErv\nCtkxmKQYLGYbO1BYoEZA6L9EZXzC8xWdlAw2sq10ZkIog0JkCdhC5TMDyePp\nuGcGtKkUTKikVadA4wvJwZmg6zluxIfLo6MGjLBPyJfaVfgxM/HTJYa/TfZ4\nCJUmUQUMnvy3xrUxXAKAINlGgI69qbOCSqBg+BJOEfK8wVV7h3JoN2t/YQcM\njUfc\r\n=Zabq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFyB3Y7t9uFrg8NeMFBIhGeSgo3EvyNN3DbaqacuthCtAiEA2MhEAd9C8at1YB8fwuiFZptNTVpMiT0WrI8FL+NSP0k="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181225013517_1545702135682_0.6616269759061495"},"_hasShrinkwrap":false},"1.4.0-targetrepos.20181225032056":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-targetrepos.20181225032056","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"c86989c85fabc19c776d39898754073c666393b7","_id":"@atomist/sdm-pack-fingerprints@1.4.0-targetrepos.20181225032056","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-5/h10ipoaFm2kyDWmE3XJtZTCLxIEhMBDhE7n+uOU0cABu79sc4yS0OpR6TId4A6ytSDByVZRe1rhKd3EeOTXQ==","shasum":"3653d6ae70586ab275246137db53105b908b2833","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-targetrepos.20181225032056.tgz","fileCount":79,"unpackedSize":5139312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIaPDCRA9TVsSAnZWagAAQHwQAKEuO7TpD+S8KGUPlzRM\nSfwmQOudZ82IxkLCG4ww6VeDLGClL62LUaervXo0xPO0yde7pYJe9Yd0acmH\nADDW8qmwBCgr7Ruc+tRVwBXk499HM4J/MUBocBuluP9fdZMwWu97eTdHXiqi\nMi1FWwtXvGeyNNzByXJh+TtOzCXX40NEJ/0Uk3DryrlmA8+FCJxysmHvev6j\nsQAJE/AjcF/hN03v8YG6l2j+gXpqlDW6JIYasp/8721e1wJhq5EU+1KW2j5h\noLFjmK7Lvp//qmq+o3Hc4k3jWuCd7U2ZNG09nbhj0Yjn8mPH2A8p5HTX9iAc\nn7W2BP5uXm/p+jjWqqiQEnTcdsIwHD7oUK2hHC84xtpufmfvdkgcFSLOLSLP\nbKK+Xtiw/BlNyRsQYZy3GdjC9xPrvA6pxVsdMckaTWxWrZkOuKTBEhWqsoyT\nH7hM0hWEnb4wDEmjZN4AkCnaQA27P9W6CTh96ds+/WHBSLxKIaHAicEk8YkD\n469R5TCtR2LefGtHH0/2B77m0JTAKjkDh58s3XCbVd4les2omGEyuXw3TSiJ\nhy9T35FtS4PXRi45twZo60wHYVDqsMLV0ApFLqEcfQjBGnDwruKQbBsS/zTd\nYNaQW2XAcLkN9xe3ywp1HsumkE4unVasLdSJaS36vhiPBP+HL3VAU/mS6xjk\n9A8M\r\n=Qgjp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAagT9hZiRv2Ol6KB/TfEg1luJSrO6SIBJXUHgmKsuBnAiB9CbthJSgvArlY4IjyIWbo/0UhXl3TACt4PZm38LLdIQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-targetrepos.20181225032056_1545708482881_0.18682509288141724"},"_hasShrinkwrap":false},"1.4.0-master.20181225033151":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0-master.20181225033151","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"a2e5061ace1a1018a64e3ef6b2ff66180ff0d21e","_id":"@atomist/sdm-pack-fingerprints@1.4.0-master.20181225033151","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-YWI63vKWGN4mlxTBuO5VSblVuLZpdapRjv3yFJmLcX7+Zc5xizFBd7fgyglql6dc6snKUnmoxqxOrM4o4Ym6Iw==","shasum":"3c5022ca5f77148117ac728bd7a2a2de9ef3873b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0-master.20181225033151.tgz","fileCount":79,"unpackedSize":5167501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIaZCCRA9TVsSAnZWagAACP0QAKDmC8xdp9D85Z0sWX8q\nqA5BTLm1Aqg5fu+58gzzBMbnLXzhMQXsAiaXLgVoJFVGzHmsY3ffO4JwnsLD\nbE6AP5uSwOdLfMDR9v1VllP2lmKZl+KPoujAoHNw6DB8dD77aXa//byfxgQt\naXcqIXTzlc+43h+5GLG80hWBr73hnq7t9IFaU/0BZvVKRLAAhHA1gfwMNf2m\nw+Mrf92Rnakwp1mN5Btx29GbGOopn4wmimJ/X4bQNOTOuh2UPo9f124Z8v/p\nCr9BR7QXBKGLzZvgR+xZelCvwb7CMu5D92kCrR812AL/NkSJ4VrK329taRoo\n2acIIjmp1ugurP9txCREjHaUbDB1Ng9EBjGFUrj9h4UF/TLaIfZG+jbAF8x5\nN/+atizDNUb12kEbNWiiZ9zTgeSZWXmu0UNdGlMOkvQVPRU8iFcrxgfZjQ6W\nuOqYqeydu4WG8CvOnUq5tLVk/v1npXMXpKF8qGvCi5gEzOUtJmIrd8XTCf0U\nUet/njLe3rL+LXNibLRObtUPsvY/sT9CSc75bfvPNlZ75qZLmN3mADzTC03q\nhoBtiBLjNexHDnONOb0h32Z436FxgOOqFlzCgrTt9rUR1rSyPFSb7oBSyVq+\nH5rtEKhqH93uh9j5t0pDhqtCbTSgfZrw7XqQ0h6vi/dpig4ibEpZFi5EttC3\nA88G\r\n=9+wO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDFmh28v+Lhv75mor++YAayLm5PM8/4qV8GdHJdYmEiAiEA7KVvzY+hM9AJlyCH/BDJVFztgxBmMCBstwVbS8Z2EDE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0-master.20181225033151_1545709121612_0.3578019016386922"},"_hasShrinkwrap":false},"1.4.0":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"337784378b7619f1d044a8b974062f9cfce59cd9","_id":"@atomist/sdm-pack-fingerprints@1.4.0","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-s4xqas+bRkLBAc14ZpkZRcZkZs1kQnWef7PN5VP27FImaW4k/wOJfrKkmaBsIZQf/vhUc6jXKpt9dLW+va2I7A==","shasum":"19265b2290193f66777c2ff0d7562e8094b17031","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.0.tgz","fileCount":79,"unpackedSize":5167479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcIcZMCRA9TVsSAnZWagAA68YP/iz66OmDUffcgJxm0Iyo\nMkNIwThLMwkY1/CYD3Zt9oO4z0gMSyJ2+viZOyybH3zLwqalAVNVLkqRRDxs\niO51H0xA8zi+72Lq42t1oOI6D0ZjRTdibdpCeEXMf7Z+zDlDgi5EFAgD1o8o\nbr3JoCeVFPRRzmnQ096XYyRguxRHUlYZczss+INyloxeRYNK8hfijTkGM+fC\n/TuRG4mFdPVMpCnjkpxgwmvnU1wL5c+QLXImkRhhmfjlzkFE88VIJhGHtHub\nsSIgeDx5rUhLGZra/d1gvkqS0tBm5/PHFS/YUcjgb3g7A9lI7RCwsFW87sEb\n5kY22WrE2MPj0OovBXRWZzlFvushctda2BnbEH8DX6JNpyhY1KjwRiMqj4Wy\nvbqQFOgiKBt0Pg9/t1p91M+8sFj3y9xU//9Yw91nhr++uKNGLnLUu4sSO2OA\n5CHl/v5EnDQI2VZJGYHQRnOEMj5hVtMThXLuY9kH/1HEPgoZJeI4RFXqeXbk\n7jR1shYy7HQlhTjsWTHpUQukvB72gmfIlTfxtTBStyehsgCOqAnjy14P1MkT\nAtBuxQM4dtpR+PH3QWVO2VtjeJkjyEXExWRcLhRck4XyGG2zFhxrP4jB7mn5\n0QQvR1isr0nxXf1xkry5SzvKl01imYzx1Ar+lo+T7HIQYDSu1p1osMvTf7is\nJpkP\r\n=SHsK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3isAIhHxhzcCD/xQksNu+OCd9aj11tbGSmY2vAl0DQAiEAgFhm+1/mrRSY7tbcHJdAmf/5sD4nkdcK2WtBodIzN2Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.0_1545717324056_0.17050748458055498"},"_hasShrinkwrap":false},"1.4.1-master.20181227001124":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.1-master.20181227001124","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"fc67b2fa45c8b5d88b9a450176a44c7bf1d10c17","_id":"@atomist/sdm-pack-fingerprints@1.4.1-master.20181227001124","_npmVersion":"6.4.1","_nodeVersion":"11.4.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-xXglBAXoddobjaeSyMey4/0g0y57MFxEveIMAbiGZL1DRUq9M8mOQgJlX6zAF0CpugTP4EeRcO74LC1GdXG5ow==","shasum":"2f52e32bbcad3ee17e8892feb0d355ab4ff7c477","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.1-master.20181227001124.tgz","fileCount":79,"unpackedSize":5172232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJBpoCRA9TVsSAnZWagAAxv8P/jj4AoyU8UH6zbAOTXLz\ntVOHbtNupCOy6jZ0DOL5KqFlA7cwOyNwU8q0+sCwxf/U+rsYlDfB3Hm674gf\n2hvhRt4m+XFDQNynj7DRNO0+D4bTjqgM8UycfzFeOPeIZsAbE4i5+pgObYHI\nm2Y4kASFwpgTjVc/BGkkinGpWJ2KduRwCp6fjKQDk3m/OWqjjSSDlNRyN1Tk\nEBjINO4f95A6tpFebhnGCCOKrSiP3fY6wLRoUKq2ipyUipja63ZonsmrU/hg\n9IwnsmG2N1cVi1TB39fqkIjMPfszHbnZGBc8vxvjNREqLrn+PtQzqdlUqLxl\ncuSJH3fogb02A8tBPEwSX0Y+MT1ytop/jn2lT5X2iUBkQ3k0WlkqmYu2o+j5\ne0lqx/Tt7Pl+2rIC4gmuMgrCS4SU16Qac6SHL37uVQMQEHnS5fHv+0MhHFKQ\ne5kaa+Yhw8SXjODNdPUxhmvgmCZnC4zYfMWOGPgpatAm7xHYiKlnAViQ3cVl\nm7/OF+EBR0WlhXhuF/hGJMdaNHnMK+bv41TAmO6g+kVxx/Q4Q7KJ+sSvriia\nhVUO5+rvKYNkbAIx6Nvi4VhindfvRLIw5LX2qvKtB49VD+3RWbAy5KhvIoH3\nTlIAe8ym0zRUmuhlSRcRxyz+TTJhpnzGK+chRZijj2Ik8qSvZQC0FuymR9uQ\nCglB\r\n=yRW/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1Gcl/81yrm7hZUN1tB5SGFpXhg/PeJueN7kNBfy7tmwIgdOf6LQe642+batt39CDQSZWTFIAVoUtv+BnUjBuZt+o="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.1-master.20181227001124_1545869928178_0.5962055201241654"},"_hasShrinkwrap":false},"1.4.1-master.20181229074815":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.1-master.20181229074815","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"0399f015e54b3d9be9d1c37079ba04fb7b171918","_id":"@atomist/sdm-pack-fingerprints@1.4.1-master.20181229074815","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-3tChxQ5YaQ4KC6vgwLiSreB0f+rEcobBoHFb3K8eerjXNyiC/fmhYrUCIQ/tiCvo8O92hhTRM0aQOlE7rBOwJg==","shasum":"23f5778b89a261bb122419a88c803bd2395335e8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.1-master.20181229074815.tgz","fileCount":79,"unpackedSize":5177661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJyh4CRA9TVsSAnZWagAAwXQQAJD6N4CTWN80HAQ4299n\n7FJvkqg39iEVit9399i2LAiQv3Wah/J2An5ErBR1ZQje4EH31iKhu11W5V2A\nbW0dBq1VVYRT2qffbqfXUnwrZIOE4bdski5IDprM1QqEUc+oqqQMtZRuGp6c\nJ8EheoPzUUsyMauMMOcJoe3GABMhFSl/u7RpE409hhUTvxi2S66gAUcREBLI\nwj/ja1S9cmEMl/HhFqR0wXNL8xADFOhcZq2Fas/baoZAsRELwgOsE8SR0rSH\nKdaXsyc/cUmm/r5PhCOP3pqqNjo6M1wfR/Z/8mq9r89qhdiHSJ6k3cqwCrM9\n1MztQZ7C9edlXuNa/0RLfZjnliN3+7sLb6yTnAkFfIYUPluB48yZH5nJWScm\nKPzFI09lNHh8XoJ5Vzygy4T2RIxjc7vrv8+uGSARqcFBPWmNwI2KtL4+v/gN\nfhoB6pZ7umecilN5huM+ZcMB6lnP9PLZjr+XK9aakiXi979K0hz6kV7feNV3\nhxpMtRc0mYbLNseCm/wq31f6p70kLb4ssoJqQnHSQUe8sWxyUBshHuAsM9yC\nB4Xs/rh3TCbLjg6RWmj1EZqJFVIyWHrA1YZvepn7C3L/dxoAXKdNaJs7mwn+\nOGPcVd8EO97vLmLRmhdSfMI3zxxrcB4Ca+MOD9PgGDsnSDxKSRSrPWlArk83\nk+bZ\r\n=tzdu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGjGGoqULvZOE7bWOc8lzNwOwEkyjLQ0DSo2l6QwAmNAIgaUvtU2/3RTyWQS8U60TwZGhMMXWai/eVbRV1prJKzKw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.1-master.20181229074815_1546070132665_0.38730119144689823"},"_hasShrinkwrap":false},"1.4.1-master.20181229084425":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.1-master.20181229084425","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"7729909201395dc3bf944e884aa361c1eaff86c0","_id":"@atomist/sdm-pack-fingerprints@1.4.1-master.20181229084425","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-KPzvqAMckTu+Lq3MrTiSy32FP66Li6Qbjq8RSDq4TGRgsCOvnXc9d1DUKijdWY2wCgyU3HtsNZYws+WGnuL3kg==","shasum":"7069ec4cf8d4dc1c25d5aeb0d37c9d95a26d6f54","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.1-master.20181229084425.tgz","fileCount":82,"unpackedSize":5181896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJzWdCRA9TVsSAnZWagAAytIQAIpdigOrgrU+T4oNizjr\nJ8k/ymSGU+7ZkafW71a/Ps4/R9M47dZPr1vEMpWc5OZPDJFrxA8w1MG7oESz\nsaAsSarveX6wC3I27Lntz24cQtvWHHCUcEjjR+oY+vf0bgbSIWm5/nB4Ig0s\n9AA7QJxv+JNqoFYQz34uCCMthgdyq0phMuNZT0AKRCTVmNOr6wtJ6OaaJbEQ\nagY9SHCB5WO6EcHVPT9JjRN9IaDQ1lklwCSC4Gd/+6BHymcdwDEAM9Tisvi6\nTpgaOHSHqC+1Uva7M1mSGWNbdMVo1BU6rIuHe7bqxUcXzJZXugoWU6sSS3PS\nAuaNSULpRu1MUHv+ICpGMmGDnoswxmUfjNAgkIRkX3MoMpfD/GozKS4iLZF9\ncm8j3UX6tmnxnNcaQDw9HT+nkjEryDMYKguY75A37/xHb8r/7BW2+FbBHCMS\nBEn2/q6U56zwa0hJGKQL4kkVEAlw9WyWsIPUvvBNAZRszHR+TylUnC2hpSUi\nkx1bztwcTByAnd3WjFqPAPaONZbuJSPU2FdSVEh180biweFz8LYDmHizRmi4\nLBnFIT8RaYNEsFtoW6mX9LB9Hl6Jigw3FWcGDeMsDbMMYLtA7pVTRMbg7z+/\nzTkD5u89Exg1+pudZXZU7jAbpEtiyWCSsKlMvIdjW+IlKKUddXrfirbJ2j2j\nUOVW\r\n=e1d+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgbssUEbYK16qIfOHnQ+GXyLW65ypqKqGJm40/4fCdFAiB6ihiP6z/5rScXT25ZrghFywATBMIY1PioYDOecHGBEA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.1-master.20181229084425_1546073500387_0.3205567151136033"},"_hasShrinkwrap":false},"1.4.1-master.20190101014127":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.1-master.20190101014127","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"2c528255e1471c1e61f4b2065f77d2f305de3386","_id":"@atomist/sdm-pack-fingerprints@1.4.1-master.20190101014127","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Zgka9De+olYRlubp8bF1GmHbUOrzQJzHyotOT8gCCXANNB5Nio5hCcUFez/jio9IluPzFgE+r3iya1lRAWHyHg==","shasum":"56e65001b00eb95c368b4ee6830e83c6027e764a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.1-master.20190101014127.tgz","fileCount":82,"unpackedSize":5182481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcKschCRA9TVsSAnZWagAAFGYQAIp+0HbXsJ68gAF+WWL/\nQANv4rpvudY+bBHHu49q7kAxrL2uTiaf5uqUhgkXR1SBpPwIT0WnCxxeO4mI\neZ3dq6pAq8bTWQknf4ZernVD639jJg0h2g9YorU4rtFe+0XQQrjizuai5aWV\nHwdjHVkcw0jMdhEpwmnQ4ltPEF/cGDQ1EHN8oeBIRWScnPj239bEanV/Q3ib\nZnjIPN7VXta5XcTx7IjUcFEnDKFfPU6KOCgWSGYgE1xPKS3x5GmfREUjPK9S\nILPDOEO1MIR0sLnyKWampW271RrEH/vdDnw4YHFkQpKdIWe4abQLZpJMNf9m\nMDDa5wDppw/B9t3/7vthUZ+p6JHPv+hC6zuFr0+ULqe201/KIxLne+Xv8xMB\n4qBgZ/XxGEVeJBRsswd5XvZ0SWDEiqzAhB2dnGMsHA5e5GSPK/HNBCtOPXJI\naQbK/eLTSUpmTSRf0zi+zr7BqAp8zfmSgmW7XuQunSq7jFOt2bfp4MAz3R2c\ntGDFh7GpSIAUrzCiB7DjpdQCQM0KshtXJZ3uMGgDNRKPAE1yEY+vgvOE5eLB\ncjRA+o24WZxX87c+vOw7hpZh1JFirbpaOOlTSKdb7Nm7Zkrg3W9Uo/Vq+yn0\niN63ub0BkhiN6OynvaOyJIfahiAC6W/IdeGY48+QMAFai9W8ZJ5/oJfD5sJX\ndIvj\r\n=hIsa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFr0/e3vHAhLSS+uWXXbYs0J+hxVhBJfceTOzCMp2ONWAiBEo29PphTUMwmgdAVEsEQ3F28mrxIPzzHGUW1tSSggaw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.1-master.20190101014127_1546307360483_0.9183090597674741"},"_hasShrinkwrap":false},"1.4.1":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"45ad68095b4138cb3949231f250bc34f5d8d1ce0","_id":"@atomist/sdm-pack-fingerprints@1.4.1","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-p/+6PQhCG7dkNrPD/lG7T6zSiQFR1z/lvB5JTzRUgJa7PkaPHy/e5P4catX82bVoeRdzkZ7Qt99njRml++1zEQ==","shasum":"55d455a6d3ecbd7e81b6dac5891092b5e8078d91","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.1.tgz","fileCount":82,"unpackedSize":5182459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcKsdaCRA9TVsSAnZWagAAlhAQAIr2tuXDBbAH3Eei6kVp\nJ3xqiNAuWcQJXuIaD5Vkqa9OwkYF3TNDAN0HeZF7z9x4y8HPFtFOG/QEIgrR\nKBdOTyT38POzk/ZLyzku5kh0MRY+XcUoOtx9V+BAhyuwfKa2dRSPVoiRvHNz\nEl6Tf1p5VAYxj4XC3IedEj1wDeZeS9wMaX6N0Zk28FoSmVoygPsez9uvLZ3Y\nDbuB/5cUQGDy2lCr/lXyk+75nTWN4a1BIkMAewDd40UVHe66tkeNJ52lgjk9\nhM8z/m0jexUt6nGP53s4pEFQpwdLKJuVldZFbLOd6/uwTEBHY9fLFi1fw0lo\n9OeET/8Tb2w8zdAjDZ4M50Sr9AJ6EibFfc9z18SpCAyB0LssIJxAWbmRyPnB\nnY69QdibWLMGLPI1yClbOyGoJbAfbrg0DIx9T+1ZVT5YrIM4/+yzYth+SBfR\nWdGVqdi5EeksiUDp5lMrlKpE0sDbLjNx54VLsKUBuDRw1zatZ6IiwjFGBR7/\nXjNCbOE2YJMGrZZ6PRdddDXwU47LKyDTRdOW8P485pmrjylMbVjfeIYlpnk0\nYwEvaRBUmg4vqJXanDP+TVAsFUcDU35rOXSf5rVjucMihOg/jZvZJbn4Q2h6\n+smrreZ+kqmKuT1HGrXlMioBq+dY+TVPkd5O4HrFb11ttu+ltC/BZTywLE1g\n0Ozj\r\n=RG80\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc6um0i3Ix4Dd5b8aTUxszHS0FOJ9TZe5sbcMyL2/RvgIhAJkTOGelcp3Je1dpwAfau/2aw9wFNuEcUzm1+TVWk8eM"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.1_1546307418038_0.6552912743643677"},"_hasShrinkwrap":false},"1.4.2-master.20190102020926":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.2-master.20190102020926","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"19e04504e318195ef0cc75d7ac42d0389994c037","_id":"@atomist/sdm-pack-fingerprints@1.4.2-master.20190102020926","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-76n9Zn42Ou1NqdLjaiSGI6f8OQ0dF5zZxn7nsOnfy4b4SpUHAbg4MCOoICElmG9mZ7iTOW6uJMwAS+3E5ik4Gw==","shasum":"28293f9bda4c093bf6a70fa8656afbd2cda7d32d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.2-master.20190102020926.tgz","fileCount":82,"unpackedSize":5182804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLB8FCRA9TVsSAnZWagAAYw4P/i3QmoTVzZaTxSJJfYWl\nRp9zJH8PRSvtaw3IL7+cbcvS2/ApMniz/4izVlkPrsivqNERudLgMr6+q3sQ\ntMkT7JoGSRLJdLczpzwI7Zu2t8KeHAC94DUo1eTi/xcT2ZVWuF76Z3c1AvWF\nMDfOlnussKmw0m+40pJf3QI/xP/7W5OU0NiDCYziXmXKaGhGbAShGwhGYIY1\nKjz6xa4VnC1fNAaSyFvmuJXq9PUzSgu/A5dA1HXaR7C9L3diFQ77PNcg8s8Z\n1JSKpy0a3b8z4/43zZx9F+eaDhQxLZpvf6lPSKWSc7Bc0scImptWWaagIXNz\nfqXF7gujK5GSZOOj9iUjOfXa8noWqlXAryodKZB4zuRLxtf63lDeu0kiOHQ4\n0ruRBqZDDOAwBiS7BfCcv4PysQ4pfsmo7mG0jPo1mkVuLuYRBKDrrXmY2Nrl\nruzWAabGliS/jW1QMUYBmFJSTH9t+t7SXV0G99OKmFi4OFhd4WiMukYE15++\nXW1H6sPQtsygx2hJr7TOJQIZykmfTo4IuVWhBKsSp1QXHjkkN/XN5enpzHfh\nww0JW4lqju1TGncUNPUQMl8KWEYSjpEBOI3DKgtxBZgpboKMkr8OcqdYljf4\nV3H1zZh8B/pVoy4INMYiiEAPB0ydA2SyGD3ZNUJ2QG7lu8qR4kWPIRfyzYEc\ncBSk\r\n=o20S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC85d96g68k9Dzo0UgWV3cjcG2M1EWloEBysPqSV3kEAIhAPuJqwZqy+z/MOt62oaOx8o3MRQJm+pnLqUaLJlUmsxv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.2-master.20190102020926_1546395397276_0.4722355705185728"},"_hasShrinkwrap":false},"1.4.2":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"17079992745ff5f02401da479f0a4ebb5a129e6e","_id":"@atomist/sdm-pack-fingerprints@1.4.2","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-mfh3BwR9Un3MyLE5JaH77WdVBvxnuCi88H0qbm6j7UIausFwgTdSo5pa9+Em2qTBBARtogt5wA6cSf3KyCLkyA==","shasum":"72e102d952e7619b3460b597ff53fa4473fc4630","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.2.tgz","fileCount":82,"unpackedSize":5182782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLCexCRA9TVsSAnZWagAAmQAP/1L/1xv6Ozk6fF7uDcIt\nrYAp+s3CleLm/srD42BOrx7UyjjTCTwztAlvUGmPPHLGtqPCnzax+6+1RC66\njPOWs7QMHVWuJNEaBQTjEgLy4AD/Hx6i1c/FFC3v1hUSePc2xBI1450m/6W9\nLD/jbda7UFMjqp8Ngtr3JkUP60UBdc1XINE8Z0K5NXNX3+RHni1nanjj1mZx\nT5xJZwMq782cIUsiySIw/GpG/37I4sbUQVr0h8Ubokmepa7QXxEYiRPPvGU0\ngCoOKcUcBMJEVArz1x2eNPdKZsbxD46ruezox1pLh84t7hgNg6aeuO0iZZIv\nqqtXpCuuJBNxWBWU24LAUmcsWIyzYAs8CJkUSfPFBlmZ/6+vG7hOTimWlJCc\nYDswjqj7klcvTPTObM3y/AuEcolpYyByZsEuNxaEe3rGKfiX2TYZ7pZ18Y41\nUHk8Kr85kbgLTYbc5AV27FauZhBTQZT4bUoruMVOlTXX8sjYUwuBTimd+wnx\n+6bVk9/EjC+MnD2iGgvshG+ZVctJ0xWE4IFIOhFnKZZWf+ZHtDzIXp3gmB7N\n2a1PqHJpl2X5aZcjvBTfZiO4D2y5yoKXm5766OR9U+F8a2BUROTWW8m39gn7\nPl2emeJRWPx762XsY94eJAjDxgfpx3Pwlyf/srjl67Q4Rs2SZcnVUXONQ4ik\n9ovk\r\n=kRqP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDhKBCvI2HPdDE/36JHahlndTMJGAjF91wWwy30PxASwIhAO/xyRqAOYp393qkAYup7ez7NQkVMou3JWINS5J2U4YE"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.2_1546397616888_0.7993629656988122"},"_hasShrinkwrap":false},"1.4.3-master.20190103084454":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-master.20190103084454","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4ceb27c5e53345ae58e15dc493f71c13cbd2e1e3","_id":"@atomist/sdm-pack-fingerprints@1.4.3-master.20190103084454","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-zG+zw99g9G+ujHHgysqqdRDTf2kd87mRuXFNJy4Qqz1eDt/62N5EHmQU51dTzF31U3lJL31NrbKxUoeWDEvi7w==","shasum":"1eafb2ad7b829ec5db74ad30a6aa0da89b26db6a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-master.20190103084454.tgz","fileCount":82,"unpackedSize":5183444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLc0SCRA9TVsSAnZWagAAFAgP/AsHk7zIBFUCsRYLFTdi\nGqCXaCOg6vthNBYOmP2pllYmxuuwEeGCkpBlaxfjVse2OufLH95EkNbsUhPM\niLewnjsvKJPiYUoqqbXS4hRHWVyEHot50PQ0Vkxi2qR+i+gcbp5DIE7zMdMo\nLk0saiF9nZNSnbZPkqpcPIHnH+KrYTevQM/2gyCS+7n8U1UNObVpzpdPU84v\n5dezjJl/NWC0vBU+e+uH/DiBasBxHUQ0sshGd4fqww0EzF4Th8h5/vL77Pt+\nBL6gmn07r7BGNZFVpoAvRu+nlvN93UtycIDNbAu/KffLTYE5pvI5s9lIMsBj\nQSa1JhGjFcbfEmKsK0bqzzQNaJPq8VF/R2FSPbKxblE05NNFXEmCXVbFGrkU\nm2eeFGNvFINWfEzg1/7229fUICxsjAIL2yqI3F/j8NiG/8F1T+0V/IsORF00\nFzke2mwznK8+ZTGFCsbfKPTJXdU9VwEBI0YMpyEAlJb7tLvjLdecdpoxuL3Z\nm5jWC5vYiA6Tn90DQyuQzEkeZskoB7FsyELyNMV4FMFjZeTnXMTU8XjvGDtR\nBpt1deyn95VUCnSBJjHG8cGRlelLkkZY2R/3CDJmkilQhQ5LSm2eTpo0Y5mG\nqow0p5Z+vw05RUct4j/dhNNzQVY5ndbjnetEfVSU+IXgZuFSyMSR90gDANvz\nNYP/\r\n=3eW2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy/y92y2V4ugL2XZWIsb9q09ffNalnailzkcMiicALbAIgOLSkf0bEzyvRKBXNWERJFheTZ9snzutowCNA9DO4yxM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-master.20190103084454_1546505489801_0.02213791717393354"},"_hasShrinkwrap":false},"1.4.3-apply-all.20190105055330":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-apply-all.20190105055330","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"613bfe39bbaa6908fc9fb1abf030ccafe80579e1","_id":"@atomist/sdm-pack-fingerprints@1.4.3-apply-all.20190105055330","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-cm1uUw6dQgs8/Q1dk7C+K6JuXCFqC0Sk1d22lHBEikJZojBNWoaZ43Fbin1wvmGzR5rJhAmW5OaSOEAJKrh0ZQ==","shasum":"6401d7be0f472ddb8cc80514754c60cb89719625","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-apply-all.20190105055330.tgz","fileCount":82,"unpackedSize":5187885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMEfmCRA9TVsSAnZWagAAZzcP/0aNcbPtspGFHJthmMsB\nWIFsv9wrqY0EN5m+Fgc60//oUGWeFeZKFDSoa9xNuDd5oh5T6aVx259UjIRK\nciKk/0lO7bEjNBsLS0BHQepHKxOoADK6+RUflbdDlbFHLpDMYMJrIshBA2w+\n5AhgomPJyq46CHKNrcAmKifT4KW7CcElRpQV0JjT4wa0RrqRC0QojFrqBlxK\n43JQnU7SU/UrXla2bLiEQZk33FeFFyoT7zUp0EYJY3tCMG3K0V6fbkttDw8z\nkLClYE2oJCo+Yw2FQoZHqacjPPm6rdscQYMnoT1ppDd9ZXDuzhMOwS4u0eC/\nCQiN90GWKAVFwTDIUMLbsPQdInMBgGmc7lxGk68W63S9o7W0ipK+CjiX4o1O\nS5dERQ2EAHbbl6XZT7mz7ijiyGyoP/pSkY1BghX1chn0JdD1b8FhXNkbw4Sc\nuvVZxLbKTzooKy0l3mWV4NPNVKQDyvEoOfhlCJEASZGuhiLyt6sutPuwiD/8\nW9IhkGN0ECYcOb32L9VohvI5GB3whMZLYYQgrnroWAfYXsS72LDpMmZA0+2h\njfZADXdzO+NGPoKaDmUlEGIPb7aDXlbt1NwvA9hAEm5vh1SQlVXCCy24Iciy\nsAvVFHYGsuG15ayjuf50vKlhQWoNvoudKhXffx8MriUFejAHuE8IhBVZVMXe\nDYKv\r\n=1pBk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASGtlgTm566XXb6wOMzv9XdDeqrUhRZSEQIBF+fVLOkAiBoXn8mjl2DL0uTrPXkj7DcwMn08/HGl/9ml70bKpLP/w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-apply-all.20190105055330_1546668005132_0.447112886231382"},"_hasShrinkwrap":false},"1.4.3-apply-all.20190107023406":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-apply-all.20190107023406","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"0a86408baca9421719901ef1d27cd071b506a6de","_id":"@atomist/sdm-pack-fingerprints@1.4.3-apply-all.20190107023406","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Pic8f7Ff2N+49XFbg2tLbyEZsD3rMmxsSRq+U03hnWk941EN11LZa8vMMFtWI9acCYMHHXs2hE4u6I2kE/8gXA==","shasum":"dc583eae4330615df731673c506811b8ca063de1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-apply-all.20190107023406.tgz","fileCount":82,"unpackedSize":5191807,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMrxvCRA9TVsSAnZWagAAM9oP/RkIdQzjW4MIS5T4X2Jd\nNF3V4vDoV2Oy01osfETMb+8IOaiz/NM1VgkhfUFzQm/wfq6NCOMV/E7WxpFj\ny4UntkcryqXgal+y8vkIiIxFcROvs5E+v7zFoVssPYx7CZZAuY/y0YNJfq34\ntezPsrN/eiViJBCPVujmWD+djvHqJ1czIMR5DowhjXz0DVRQeCdrlnFxDNmT\nfkdCGnBeKN2sU5ZDkXEGHU4zmZIQH8fTVraaKeke+NMGUsbZ7QieT/5gosiE\n7lDg79AIyUpclf2TtQiERHHAEi8gNHICR2j3furufWoeVyYZlXs1lMSPzxCQ\nZoUl11eMwCX7AYDTY/0KEwJwsuMr0plR3Kq9AVkFMyyqSJi+WJ8LPsYUAFF/\npehUDHC5jdKxcKaGVGYa1sbQkzdr7CTaYMNuHPO+As7WpbKTCxoGn7Tkvo4D\njgpZteyUGzL9s/5Md62Wu9hzRP24MBV2gd9mMXGRzM9BTtykkR6SnKDVGPjd\n0tP7COl4llurPUYTcB3VPFkrbblc/+EOZBicHe2diOZx44uRdp0aYM/a17Q8\nNuexXt4p+0eBGk/s7IQQ2aWY38o3EEatSGPK0/EIgPB7gTt58arx0yauvYJC\nhjaURDG99gx/i4OxstjQzZ+bYsoNigYRpN6MmvU1E4fIbX2MZU78ilvXko8A\n16kf\r\n=VnAg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFKl2XVTlaRLKB+gciqEdLfn9mGjTHtm7UygLQmV2hAdAiEAhTFfyiZfRrBdmMvKQPHktzOXMmzq8p6GTW+aTf9gAMg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-apply-all.20190107023406_1546828910647_0.8680890990028542"},"_hasShrinkwrap":false},"1.4.3-apply-all.20190107025547":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-apply-all.20190107025547","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"0b34ebc9bf07adf28156cc59147f2f0c59773a8f","_id":"@atomist/sdm-pack-fingerprints@1.4.3-apply-all.20190107025547","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-vm0sn/7FibxZx6DU+MYilOUakYiFdWnao2+aCohuS3FNgZIcqXwMkzeSOwO9YlJWalYQXVAzntC6BcytwjdwyQ==","shasum":"91c37ba1d7fe6edb8a5078cd38305ee5cb9e4a54","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-apply-all.20190107025547.tgz","fileCount":82,"unpackedSize":5190481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMsGHCRA9TVsSAnZWagAA+TEP/3EzsuJKXpwDNMGX14CA\nhCnJNCdh3wu6hD7+Ek9X12PQHz8oEncaEsZntSPz1FjH9dB1kAY4dzp+N8uv\nCLSpoHjsfw7ivYoe/gOREXDZA1AU9wg5aR3hNcVZQQ7qNWu5Gb5hbND6+PIo\nUV9CTatjcTCK8u3y0kCZA7YPjh9a3juMYTkgzvf3wDJAiWcCoOOo14HyV9Um\n92sPtf8+Zfb7SZbf0fXR8VQagWE6hgD78iswh4R+2rt8g8x2eYYGRsDqHTGs\nTkhxHLlR1fGWneseBitq6SQaYDBIG0u53KiN2Ovn84S7bHOrUi/Y6CFcEEn0\ntKpuMOmxI7vCOoXww7p2I4SSBZC9qel6dgN7LwjcJ0yIL0b9mod8mOUxGHbb\nxr4QFGL7YAwIMaAVnQ5qD3uly/1d3FlGhtkxntkng+Bna5LBWb/Qi97qfmFg\nRW+kvTte+vGqaehiTCFwlneO0VRdC7D4fcYtgoiWVW11PiKuVFuvPKr4ZtyM\nrVsB0efQXE28T4u7HQ88YfYmUqcggPMmI+TpZENKPkHYvb/WX7R0L4nb9/Fb\nhzUjyg6pf7IdnWUErnH+LOjLUAkhB+4ctLUN+mOPdC/Oq5+0rrPBxFsG7MKo\nHCFUeeLqqspYO+8zqwR7pV/uAN0alShhJVnuPr6UuGC7t51xocB5xQq3h+MX\nbuHN\r\n=WVWy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELHuDsb/h6oFN9w23U4Paw0/fyr3IiqcbdH/NqKlGHaAiA58AFcTRlcR9ZxZX80hYv4hsPWaUQ/9dB5l2tN+txlXA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-apply-all.20190107025547_1546830215251_0.7043696062559874"},"_hasShrinkwrap":false},"1.4.3-apply-all.20190107074329":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-apply-all.20190107074329","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"cdc04e824bd19bd17a72da386579cb8c1c093af3","_id":"@atomist/sdm-pack-fingerprints@1.4.3-apply-all.20190107074329","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Ta4RWwtF//eb+NLs/GxDIEbxuXP/jLqt8ikX2d3TDxgNOJh69xIdNCBxKVWdmekwH9rBIUf8P6erwMYg//gZrQ==","shasum":"254b702a676f2653af3d0eb25e8f76513d2f8158","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-apply-all.20190107074329.tgz","fileCount":82,"unpackedSize":5190594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMwS9CRA9TVsSAnZWagAAAmMP/R1D4J2OvGNXUNr2l7SC\nC4dhWlaGDcwBiP+O6oeypV/sYwsbxjD12GIvbXoI+fxZ7B6kAJc08WQazXdT\nXd2IlD9fqMry13IA0OzG3a2fpfIrujpOOlFsjdLdgt1lm249SB4mSn7wyzZB\nVVIcgP2v5AUV7vRayiAuJTec6Ezr+P5qorXlLUJBqg9Z6GRf1eKC4vop2TDG\nC9PBx/VfuDbq75ZGrpg2W5Qi9Qys5Fji6F02IcZZFTpwJXIGmvoHYrtgwkBI\nF88VyN/VGoDpwEkFvQwf2fX99gvEqgdfJs3eG9fdfL0IURB4e0phFDRftJjW\nEx75Lm3ktBxR0/EH7GOezJlrrETKSgiKLBmocLA4AM55aVZyhIAXVymJejfm\nmo029YQugARt+KWYRe3ZgQGhwYy3fXGBelHK6mjHwpXO1iLlDRZLJv+lxbbW\nPq6aOGfvJnoJ+h7TNDz0anMGQfPVvq8mO9MTSPSnnre2/myeaCS5r4u0hfZ9\nTtMTpeSd64DL5ORnkFCXRGbx9jq1U263BWAtJEOYi9DlnXBbP1aI6d7zoSkM\nSNYXj3uya2vb7nbM9Wn7frUB56XkBr84VdHbLEaW/6Ib+SExy7bkd9t37KND\ntYUvffBzeiwNMuldnUfNWyk/MzDFguAPp9M/y9oX/wCksnNv11q4sRLGlygX\nL0wv\r\n=KgpH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAwAEWyBPcwAB9SMxOD3SoThlX3yhyT+vy82QYHNbUQVAiA63P/TA9dJ2cUIIo/GzuuFI/YcdXeVvvngw8FD1mDhMQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-apply-all.20190107074329_1546847420328_0.8750212117304867"},"_hasShrinkwrap":false},"1.4.3-apply-all.20190108055037":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-apply-all.20190108055037","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprint/next.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprint/v/next)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"68e83e08b6fed5c504250a15b46e38364144a96c","_id":"@atomist/sdm-pack-fingerprints@1.4.3-apply-all.20190108055037","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-CsGdSzf/qNSMKbfTSfD89toviiq0FhFkMPaOLiu9ke/mPItBRL0oZvf3vkGstGhs692CRdwpHXQc/guSqVF6iA==","shasum":"a23399248a13439f8538ad7e410d2b7a5a1c2493","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-apply-all.20190108055037.tgz","fileCount":82,"unpackedSize":5193777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNDvjCRA9TVsSAnZWagAAOxYP+gIkn1Sn0qxmDm9e2+2v\nQqXDr3ZvQsGxg6lnFScDOqp6pQKcZclCNHkvUv0NXyRrm2Wbyi27AGUb9cBg\nVrC0hl76ReSrKMAFnL53+Ak5sjD6AH2KF4Yrg+OhgcfDKNWWi/9bP8EWoG6Z\nhqoquUbqXctGn1Pzp6edHYkUOcxfJSFfqsOZLxMtSjQjVE5VePjLqzAtlYAG\nPYfcZF/BQLLYsKhZBj9FXR5/BAzE+nPd1GeVcYm6n1QQwsFG4yRasT84Dc1u\nmsyHPBm1WGa12fPr5FT9gBb4j6FrmkkBfwST/b4H0tfZp6oNWw8fv9PpoOan\nsfGY2+HoFNzK1gOV71qZsYlDpfiNW6tRvW8ih7n9y4BJfzHEWCJQWL8R8GgW\n8uG1lXXRbcfVXh4aopaB+2V/7wxWYrfJjP6uhbXfNbXIMPOYCza273poWVap\nZ1f4/4KDNBEAsXFHZa2GHYrIJIxq9E7/8qTml0Blocg8KESS8/iNqdoPrt5B\nrJ9/fJlZYqfT14eF+xvAvkr2lNGwQ/3DV3L+zbqS3M1ZkubcZjk6+tCTniAt\nMkIBveyBpZg1eWb0D8CtnY+Cya97TEs1+J/Td7wdyPlR0xrJjEfoVCK/F//M\ncUH3BqEflvUYMR+9UAp3OKRLEXMMOaJFinnBe7/QG0F+o8tocwD0yRFS6nco\nlJku\r\n=z5Sz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGt0Y+qSDrxmv0UrseXA2V7dcxQz6iNn+5uZWxlSWZ2SAiEA3UT6bZKsnpaupm69WUZLDwAI/lJBCrjQhPBTk7nNYSU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-apply-all.20190108055037_1546927074994_0.5953417671100845"},"_hasShrinkwrap":false},"1.4.3-master.20190108060259":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3-master.20190108060259","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"88418ca13d33145148e27da92cb608c80466d523","_id":"@atomist/sdm-pack-fingerprints@1.4.3-master.20190108060259","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-y3/UztqQfpr5xFK6FlTGYJIK4PwRo4rNmsS8yi8iDczZ+7x1bY1ZOyNbeFDQDmv9Bs9VegdhuH0rULQ3vR6YZQ==","shasum":"7cf7b800cdadc87ac861ea422d67d90e9b3a73ba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3-master.20190108060259.tgz","fileCount":82,"unpackedSize":5067305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcND62CRA9TVsSAnZWagAAxLkP/3j5BUOWvrFaiEZQNH41\nJY6bQt3Bu7u83rzR6o6Uxij80GA+BQM61GJuSVrJG2Qzuf0YhwbYQW1JV7DE\nBIoJ5T94TEJUrIikDKI1u/wyqq5D+kvWVHzIT8b/dPqjvTAIb4VM+dz9VmCY\na6/XiJ5/Kvlnf7FT5jy8FpKdWHyECVygQwLjkpHV8DFjdDaKUO6B5seG+G0l\nusuo3po0AL9Znt50vqDyQMtarv9rLARtxv6kdVtJZO6X3H2uzZ6vN3SFkXEM\nLa31s2V8kIa0jJVEFuywAtmc+YCGKDVpOQiwJmpLcSl4o/9vt6z6/0Ohk7a9\nnZjyTuRjYO6Uj+VahVEe/5Ej+usr41X1fIl3bcGNGjLXf5Ca2DG2OB3ke9Wq\nF3mm+rQsmQGww6PDq6SH3ekJp+vTroGILTMh7OEkBxIIf3YtQmnFMkEd14uM\nQPCzIwA9JQbtr5MoMqvLsHzztf3k+IjKhWVvHzJM6uYaDlY86UJrKw1mzRki\n2J4iAtrk2buF8uLtVzikua7whR7Cbl0AvCKBCvIR4Vxz5Ioxn2iQM4M8XoA1\nRQYJHD+tbVfndR65TR4d5fhp4QVDhy/Gm8IkBVHTLRBAax/bLAFFRrqJv9+1\nJk/DbWMyRMbZUqAahu/DcfrFNWC4fl0FgyGtV5n2TPCutkqXkXpT5cZUjXHx\nWfWU\r\n=yQX0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIB07VHFuR2nqi319uVEhGlhB43DPQLqE0nGERPJyJCQIgUtyDB7yyf0y2oYsRt04Fv1pVNcE+kRv/UcorMGXwRNA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3-master.20190108060259_1546927798089_0.919903824689609"},"_hasShrinkwrap":false},"1.4.3":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.3","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"3fc079a38af6774ae1403f0b234be05fcddf6bb1","_id":"@atomist/sdm-pack-fingerprints@1.4.3","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-1iR4sed7zFB0Nk1gLw8Rwbrj4G/YkhmeQXCrqHfwX0lFTWTz9pg26gygNa2J7/VYBJHgbI9wRf8nAdqh37QpTA==","shasum":"e8a516e18354016aa36091d6a0f724aa19f231dd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.3.tgz","fileCount":82,"unpackedSize":5067283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNEAjCRA9TVsSAnZWagAAOOgP/210yxa001RmDfDXZ/8m\nQ6WZB1jft71w0pa1+nTtmZLaVdA/eJhoPThXIAvniU7dWwGU8JzkWBFQ2fcF\nREMT3LD3sBlSbRp+U/DWp7m+7D/wobiatLGTVtexIKG+iqIy6Yjfs+yaLzJB\nh3L5HTsGry6z2Ujweoc7TqKPhNnKp/gK5Q8IsUy3XY0oOaMzQXns3h2ek3yf\n3gzR6JYtvCcdQt1GbqzuKnn1Go5ffIFezUpjHq5/HR2Ok9SPkbUtjMSX5qSG\nsOfsf0TNyEwGVvZ1kpL22c2igcT70hguNafi54Cif7fc6lbvYayyBx5QUnUX\n6fyDZWn49DvWjJcU5PtGyyPQsc8qNUJ3pJsmwR5NpkUOBTBZhH4dGjV+d3xx\n+7rS05N/dj8hokwcx43Y2JjDyW7hS2KBS9zMzEz5r63s7OQRgImkbONEfxqv\nbtMTxuVLe7/FJxZHew3UT3NnU8+hArYg2+EkTAEIRaZf0Wsl92D2+v7H3cWf\ni0gFrQE9EYD+4BgRicnaAOrsWa4emp26nWjFEslyoGtJHzf1FcaPQEZ3+HXl\nfbBDpSzBsjWE68MdHtlD9zgUG6MBoTULqPUt78KcLyCXG0JGAMgKrd7Twqq8\nhhy9wZoPTuekGJ4Z90DsUtisCD19TcA1F+M8zoKOFLE5fC+/Le9mrY39riyE\nHMaM\r\n=prUk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvY3CF7cBQ6J1NevzU0PvLZ3FCOkAwudXmMYJx4zKHoQIhAMOqUpKwDZ5+Gm+jL4Rnl4WrxI/P1up5gZORN45hsBtZ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.3_1546928162403_0.5857775089451212"},"_hasShrinkwrap":false},"1.4.4-master.20190110020615":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.4-master.20190110020615","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"f7323b1066cb6fea2669c6c775a294927ab16099","_id":"@atomist/sdm-pack-fingerprints@1.4.4-master.20190110020615","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-kdjys5EtRlbhts4YyleEDtat5mil1GJ7BK+2djub5FcPMOaYVXWt5UkzZ6Our/ZZ/K3a5G4RzZ0PG1WW+Nh8uA==","shasum":"00edcbc6cf139b278c92becdff8c409e7948c3b6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.4-master.20190110020615.tgz","fileCount":82,"unpackedSize":5193764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNqqWCRA9TVsSAnZWagAANVsP/ROU3tnS+AtFkicxzz7f\nssEur1bexM2LuJ5ipqYm2nqz1W6lWUJCNnOwp7FZlH8bwfGsLWur+Swnl9el\nWzn3gqFpY++ooHYqSXNC9z19xKkoFwSIooSIPS9Sx2kRLm+ampSOjfdl8ULt\nm/kP+DXplU6nhy7VQRehoVEOEjsPkOU6LP4wHTXhCpU5E8/ueGMHwXVACOd9\nXFo9xZCbqZgVFD0x84TG+udKBOK7s4YQVBGfsJbo68mmpeXl5akmqayd9wqF\nlIZa6QE9MEx+pvOP5qth1gqaHsrtlHw739cN5KS5bynfedAXjKyL5w7LU2+/\nJOyJixibUusQ7xWp4vtQ5BH4QSQDahqS7xH+puYoVi86g+0zbblCcJhzlWKs\nkloddns82hCfpiTaWwnbVPckQ5f2XH4j4dVnDuwWv7II7lpL4wxBNYmS6ufP\nwvtgDKNSCTCv9RfBVthoRkcx0sgwtxDkhNKStf4MiFlN00pgWtGAK5wtuo5T\nIYyuo7r6292FgXRMQSMhvszw4lVnn9kiFkkaJILJyLTi/O73KswIXXeQypgn\nkQmS2fG7NWdGnOnedaUiKe3nKEpp/bYgIgLA6D7TrkPdXC1qHA1Qrm5TQQch\n8kh9yjFWOdueNiw6oOW9m14qqtQMKb/3+xpoxv891iDVa3uOBpVxVpSFzRpc\nyU52\r\n=zRKV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZHZnZM/kJsVZ5LrO6yhmAq9lzZ/nH7bcjVQEMxMeHdAiBLkOJUwtO/ExeJ4UUU0k6nTRVuFSkeCBh8m1CZL9cGAA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.4-master.20190110020615_1547086485852_0.4794282666567944"},"_hasShrinkwrap":false},"1.4.4":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"6cc50ca5c7be2dd34f082f4639ae06362f7722a0","_id":"@atomist/sdm-pack-fingerprints@1.4.4","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-KeXgKokGP5KSAESnB3Zmpld9vpdGU/3fQdsVhLtW3/5nOMyryyT7AmMHiW++bRXfiX2mVnHoIrJNJw4TK3uCPg==","shasum":"61613c12bea26685a9187f86ecf273b7027faef8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.4.tgz","fileCount":82,"unpackedSize":5193742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNqrGCRA9TVsSAnZWagAAvIEP/i4lcuSrfrESoP2lTnCd\nIBaAL4OIo8F9S+ZSJHwW5MGGA3WYMOzthJpU8g34Fvdxc5tOw5tPPv2KW3Xs\nAkexeDeOw8118jvRs121VIYxVrerg9zWDUy7ZD3g9fnCEj3ni224RAtFb/CB\n7QJcEqpxc9icNyxNN8OSwFhxolQub0kOkgfAf0b1IuNtrjosCr2sv2m5hGi7\nUkAb1R8l/LQuYhx0eyWVzbDpfU2Fp8u46kzz1Q8+UnBurNgcFvnQmJ2N9Rpd\nqCQGJEOpr/gnKI0bg/DGamZJTyYhdB5MUcKow6h2L+VBkVVUo5gHYWmkl5UQ\n/ErBPh5n7gpqLZQzLRQ1ktNhZXUvNjaE8QUW6Dqgw/TPso/+R9ISlULgIMhd\ng0phaZo22l4568x9FTTi5atbmZvB3VGxRceeM5EHD5t8Uvt/zOJZNuZBKVao\nYUcpeSS6q+vTiiu/DQ92QdfeRTxObTPgvjbj+W8Vg0fjXxGH7iMlBjw1CRF6\nPy8WzNE3OK/UrF/QPErjJvlMOhbEfbhR4rc7W02FzUzSnZ/q7sLuR0fx/0nP\neMIlf/504oTkhZTYjXUgxm7Fl+pWyyoIbPp8D62zJVgDZ+ZVneJYClT/cmRe\nsCfxiMJoeYAjtWb5K/WCzkbGJpLdQM95siyd0xS79+0ro+QSYhFcawn4NFyz\nQMLr\r\n=4dCD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHQlRXRK6Tf/8VXrsDgeCVcjwwLM+IzP+MDlmZk4kViQIgCdn4jQCGBiLY4GUPEKao0/6RGZ+mJ3BUNWz2PPj2EV4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.4_1547086533533_0.8872273942632614"},"_hasShrinkwrap":false},"1.4.5-master.20190111052317":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.5-master.20190111052317","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"18448bd01bc983703e6cd36b3bff5c3bab29d89b","_id":"@atomist/sdm-pack-fingerprints@1.4.5-master.20190111052317","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-uZNitOnjrPoOTtw4danP5EHCh/4xBTkly5chklzgMLqtZeaSIQnUM3c1jzwJ00byFvNGE336n3zxTS51UzkOzw==","shasum":"49b33794aed501ff2a36c5eac219a012bc411259","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.5-master.20190111052317.tgz","fileCount":82,"unpackedSize":5193048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOCopCRA9TVsSAnZWagAAbOYP/RNeHAzVIYQkxWHCIK63\n8Ee2marsgE4wuMyeFzieOgo+LkTcf46lGzJCfNjOkwQntvBBt4SLPt2xP8NY\nTK8ezlaJKHh6IU6Hp1iPCLFFHD0Ly2IDz5YY2fhd8+gIYSCtEOSx1lwKyTFO\nFwASMkppRLrZKla0C+mih0au7TLiW6frDlTiS7t6B6J/0DF4U9OejfSoe3ei\n/drmOjXzCX1X/exMbtE13wh2ZKg2V27eLO8CIbXAI/0Up6GYdiDjT0doHJkp\nIVnFTHBGmmOu4sEdMg7qPlmO8mrVyg32Y+2u5GpaAgruqOxhlqfUWflO4lT/\nQzueFUdJEHfWUfci7706FOPr8cD9DoVdzdcztuOmdXqfAVmF2halNG5/GaqO\nu146BKQIMQMLdkNcOKdPvc/k95KTLKqlLZi/TXtxGieEkvvvxyVp/KLTM3hh\nMCVfdN7dEBj3uMlj/luTVGkvp44pO+FT+jPIVTca3LJx211HvzLMQ1afDbuD\nEuL1sOjRFu1XWAlnX2oGXdYvLj+VlhXjFr84/Dms/X1GbU9OfacsUaLXHXkR\n6jvYi+BQ3U1+9vO4BdgV9o4zw+sm9wHGOR5f9w+aoh/D1eagBBmNu9FzM4Mb\nuYs9loiO2G+T6Z9NXH5SalFuagHf3jDT1IGNMuA920uaKtvd06jptMMhdU3n\n/Q0h\r\n=s/b1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICm1CxhyQEc2rOK8VwDwX+JPYB9+MpUiCT6W6bWlP25tAiAw/CpaaAjQHeVHdkUkWKk+JqjoDk6DbuXaRX6KMQyCEg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.5-master.20190111052317_1547184680562_0.7740290299489747"},"_hasShrinkwrap":false},"1.4.5":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.5","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"e680b98b36d1ad2669020f741ca3bd9a09b07361","_id":"@atomist/sdm-pack-fingerprints@1.4.5","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-yyfK1/EvsaVZVUP862I0XACmRawuvuTNCGUBhRQAqXYWNTciLcZ34mKQ8eywfLDvSLQsLfd5aEXhT8wvSNa4xg==","shasum":"de91f9f8e0c10716041d94bd2104e85bb76712e0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.5.tgz","fileCount":82,"unpackedSize":5193026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcODg1CRA9TVsSAnZWagAAoQEP/1zJShJBUzvZ1uSmHitd\nOgUvBv3EpCo7Mksof8XsgIVnAYU5jjwkUp+Jf3UoPcLmoRqob3uKpWKCNK9g\na9Jw7kVloAVg7ODdWQ9uvf2g4QZ3Akn9zFsVSM4U1LcLsoGCgyeglJkqYSWo\nAPVJHTWCafspUvi5V8a0lhDtovRTq4owurKM4VyB+FRJ+WKvHNOdEK6ASSpW\nhxG8dpxsNkqMLcqy9b1HVNumx0jgVU376t2mSG+WPqSP1HMajfymJpLxYKil\nEnDgP8e9NqCc85icoysZd41AniRfmft/FCU3/PkWd+DjpY1buYsDDwEc1rUz\nJ5Qn2K5szbQqyeYlteTRfZC06MARJWaC7zp9M8lnhoD9kWEc3hOro8BD0Pw1\n5JIKxPekycoAc/eQgrykxYnHcW3C71FQd57ObojdBdKJv25uO8a0UgTnNZMi\ncktcQOusbVP3F7nOkn2xFHXPitkm3iVEtEocxVQsARQjzx7suK5vnZb/jEUz\ntOvi3wdHv12Q5tawUTZo1DezFCL1+mOvFIsEpO/SCAQS4p1PTInmAt5QPOuZ\n7CLOPdCRyhN2KU2IZmuduW1G/MV/SaUd2FjRJLwzXqq50bduQQW42Ua8b+SS\niRZU7Lngd4ne+zG/Jj/awEIsQHtYseJRictVWG+tGW2/6JTV+D5+5PFW9AvY\nK8e8\r\n=/mT9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGef5838q6DEE+t5js1M2/Huj/+tCWhVPtSsE+a/Y6FJAiA34k7brUASGuGFBTfU8j6eaOQ5pKvKjojtragFYEO4kw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.5_1547188277047_0.7439956231845541"},"_hasShrinkwrap":false},"1.4.6-master.20190114174130":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.6-master.20190114174130","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"1114ce6d41dfc15aecb82f3f6ca2ad94f4c7d4dc","_id":"@atomist/sdm-pack-fingerprints@1.4.6-master.20190114174130","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-sfidr8kv11j0Mpa0Kbo0l4+Qx8zDiqyNc1EEswtfTnmOqXkM6UGdZq/LhvB1zVI+vZGq16JVzRrwF1j9NOXtEA==","shasum":"97c68720698867d035170a2ecaf11831a2811d59","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.6-master.20190114174130.tgz","fileCount":82,"unpackedSize":5193184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPMu2CRA9TVsSAnZWagAA73AP/2DWww7lHGygK6ycNIBb\nHcPC1JWgvNxmW8wZicInjlLkWmDIxPIAtQ9I7zLzrRtv6RcqBnk0h/hG+DLr\nHfn18cPFMVoO8wewfZTEaqrKYIQJEIFi7EIdzFvlUxIp9ObBdXnYRYdvoePO\nlm6WYRSuM3KLX7teDbbTsu7WK7flNJ32SQlv+6JM3APAvGI0bUbtLbkm+BjM\nRuiSlBH/ZnOt98ZDzy9bIQVi/YskbXDiuGD30Fh/s741GAlqI4WR1esdvsXx\n01zF6PLDeXrzjyaAojoSClzGG/v7gQ+8cNeAlXoMQjAifmQuDDbS0HdQmT8d\n3mJJfFT43ByIU5Ka+A9/HyNpZhdXwEvkKYvrRKBMqELCUCNrGN9/x6vTZCsA\nZulsKRfFMNoe4ztlyffQvX9PecsDkW55PYrJwr85Fh0szJ/p2RLbpeOD87Gt\nwwA+bgK64py1CYbHA/hFnndEM/B7c91DWV1lcjBkxitKnUMVvUu5kJeylsqy\nSIOpv2kLXEMgEL8jzh3FrRq5opLYzPbzpve0NY7+Qtse3nlmmozpI3ExSAbG\n9dm1UUs8peOkwmwdM1KWKuB5Jwsi/LvYXEot1CwwqrZeJlNJK3DV65oKDtMM\nZj0Vo3AN69IfF3XxJnmevCILMNulD2eUN0biZ/ov7j3UMVa8BAYI27N37BHJ\neEey\r\n=9v8W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvJmONWb3nW5H1ZGaxdyv8bifVMq/rxxgVpHZjhDLHQAiEAtS7fz/Gd8avYtfICxEwTiS85B9/1oCKJefjXlcldsA4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.6-master.20190114174130_1547488181387_0.9319254021367689"},"_hasShrinkwrap":false},"1.4.6":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.6","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d777a3168278b42c224e74b6e595ae65f46d936e","_id":"@atomist/sdm-pack-fingerprints@1.4.6","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Ua8Rw6IdP04W3J3A641OFYEYEapjRW885yeJ61t+wnRMQcivcTEHpyM3AmWhfU28pjUCbGidJQOXMHtVMK0TUQ==","shasum":"8189c0aa2f62dd353cde54396a110a42bdc3ba57","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.6.tgz","fileCount":82,"unpackedSize":5193162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPNO/CRA9TVsSAnZWagAAFRYP/2Mq8x1p19ox8N7dQEci\n+Todh+9w0BiNj7tJGD9PVI2jrjYRe08oowS2AUEDURplN7/knc6ravIsjqZ1\nPIk38xSH8GO4hpcPDymuxIGMoxFswClHlbTOfTYuwNGVHm2yBlGPeidbDxRO\nwKEOXmXlKpvn4IYasgeoOqUfIueY42NY5CJbQhwifvhGWcmBNUo+8H5UADiX\nZ7xB+fwtizwQblync1/lCzbs8ePG9tECaAu0U4ujKjfX4GhrJdkt+ZDZFjMs\niYkto1UC0xp5hJcMaRRZScUtQDNn2k+TJZA+lQv7AhbYRbd7feis9VWTLJe+\np9sTOgqDPkZ5xLkzHAGbfKQU48iNCao0zluvY8Dm3OcZh/t7SqIGuo2PjsHx\nF6/hA2etj4NmOTyUvMADJHR1qGu+pQ9X7T+5mlIqevxSP+WitZXPAWfnwiOQ\nXvjCcGnR8RhDFboTAFDL4GwRzdCpXbGwGCCd7z6QUhGP1f8DXDEwKpA+2KRx\ng7GG4K1YVlXEc6rfOB4BY+QoOkT5y9R6ow/Ax6J914GsZam9DFJ/MQanNmMP\n2dTuFwyYIDuqFo46HtTsvuLe9lhAdR88QxZu4OenEh3GiLoo97he5LEMhp0N\n0ZqTt03baSk6nKhn3PvUa2zGc1Kp7TKjvG16i91sBM//rchwFHp5pAYy/yEI\neU4/\r\n=MMDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu9KvYd9fahCIY1/2+08pNX6dDDK9mAMjn1qzxxwEh7gIgZMuPQuJS84qUWg/wLOhW4/qDOhLJjLJfgO7t431zp08="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.6_1547490237669_0.12474359512485211"},"_hasShrinkwrap":false},"1.4.7-master.20190123043801":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.7-master.20190123043801","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3aeba26948da67bbdbf68ba368355d5d6cd86887","_id":"@atomist/sdm-pack-fingerprints@1.4.7-master.20190123043801","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-iN7aCLmL1fy8a89AtFq3ORdAfneR5Ct5qaxjfAEzF2n0LvpK+IgaSFB6UeuObfaGSdJMwR6FwTeLFXupg51TeQ==","shasum":"47c7e8a38e83bb026d805491b9c00e1ddb78adca","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.7-master.20190123043801.tgz","fileCount":82,"unpackedSize":5193064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcR/F+CRA9TVsSAnZWagAA09AP/3FlHTfJ2V2EaGgTTZic\nwrmyEyedfCfLJ0mjYQZfGO40gVO6+6IOZm+P+B4c5o2Ha9TYmTXZf2AyU7ww\nHE26Rj0HyHd6nHwFGRYgC0UUsaH/SSYNadWiW0ZapJ9czKiHBfiTgA4yFHif\nwR6d2G+RAXEnJsMMM3OJ1icwqhSEbU4pUaWlCrGERKk1gK6+kjdXL4XPbIgw\nFgvx1EMpy/bD6lm2GZWA0zG/v7VOgXM/T93nFbIrOrPNdC9YAfFct6v7QfQu\n3HChm21Mw3HA4g8tcqCtKx1gEZZOVjQKonTLdI1MmJLgelVHbCaP1KLDD7Bu\nZKexK81jZ6UpEAL6GMEMbOwzwBfy4x2zTl62kEfBN/AbasMeUOphaXtwZusH\nF+TUSxfiL8cqUERHp/Ce3z4gDWFvuM2nt+Q0bxtemtlNC1i7EBmJwkVUqw3q\nbQ+lBCkZOPbcubPkegYVKh/mH/BjLsQ7B6Bu9CUSl9yCkHHyz6ePapQPmpvB\nbwI33AQTw/26vG4siZwmvx0k6Vl/dbKev3BDRJ6ROfov/2UN1V7sUPFmtVa+\neV1yMqeQIwtGZeYh+aRYizan9/Vs8nb1ozVHgPBdmN6x0JozKAVK7SrwMA77\nQLiJ+brvwbIflosasCnl0NviEeuZ/qeM+l66o9TzQx9btqK7E3ELEhzJf8l8\nv/ht\r\n=kozq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA2t6hHT/CSlM2edpyzI3RGKq7to5W5MKFQa/Pa3v3jAIgMKpAjNk5TIeTqfVjjS/tTSpXBMyrFAx/GYW54De/T04="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.7-master.20190123043801_1548218749202_0.2034625904004157"},"_hasShrinkwrap":false},"1.4.7-master.20190123044218":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.7-master.20190123044218","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"3aeba26948da67bbdbf68ba368355d5d6cd86887","_id":"@atomist/sdm-pack-fingerprints@1.4.7-master.20190123044218","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-1qC8OMhK1oRPOgjb7NlW+/kdX4TtzOko1ySHhFiuDGCvzMijBhs5nGW04zuAgvPtsQ2vBGHPtB/BKGnJ/jA7SA==","shasum":"a2cb329766f102acc7e90ba697ccc7af08dfc69e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.7-master.20190123044218.tgz","fileCount":82,"unpackedSize":5193158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcR/J0CRA9TVsSAnZWagAAXqsP+gIFOyHIMVSM48SYbss8\nQKKlkJ+1F+kj2qzoP/Ckglgmt8JBuvgpJJgBG9gk5ZAdxQU+HilQELakkeRU\nn0AXNwOfvgXGqdJLUjOYN1FA3dRMB0uklkUUGZbY5RrF+zrGPdN9SRLavZ/P\n2IDAEJNT/VSuEZf22qMFJk3cYFf5hTTR6YDvty+gAjAFVEVnZjSiP0TylnMc\n2ihdaxF09LIhsGNvK4lR853akodmpguHC4zcqj+lz5M/z+q9SeHkfeNN5mSI\nZ5/oowkoisTggZjC//BET52tkcjUg66CK0hvhksbXxZAmmHs8N9feQ5ZMEUB\nz2WdultT4fHwQXN1g4ym42vGA3RlqjWB1cXupnauDePU3h8OereuOOiB316W\niZm0AZwgoYgVWoNyKHmPAvZ1yynUIdal5/qXclCs+XJeLRn6BGTXTJNfLrTS\nov5az29pbNwJkIRwkA31qjpce3Lm9LdD6q0Z16QGAnfywg3BYJlCVbmurW3r\nrwqeNdoCaOc2uDVKTfKEXJ487FEzWWxzIj9rp003sgDqeWsRzXA2pQd2jC97\n3zWF5dq+eZtYxyPqm+FoJEtRHRhU/hIKoUWnkssSKaOgjC4wS1dj8HDoEoj8\nR3ttvVBw/+VM/M14kfrwa6mRvNFkopKXfzrGc827JS3+g7Ft1jxZEi4mvNOm\n+fJM\r\n=vX0z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDr9UvngaKDrGbU+TIAldIMOH5t+wza5Gm6zfyP5uiziAIhAJwhmPF57aWA4q83M1zXm8IEMrBerY3sroi2nJGFteSl"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.7-master.20190123044218_1548218995670_0.7248411226310609"},"_hasShrinkwrap":false},"1.4.7":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.7","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"^1.2.0-master.20181221193708","@atomist/sdm":"1.2.0-code-transform-branch.20181221193253","@atomist/sdm-core":"^1.2.0-master.20181213212357","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"e5448b50147244b8d066f94858a2e53e2dd81935","_id":"@atomist/sdm-pack-fingerprints@1.4.7","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-RihcNyVxjoDqWFbbaYn+zrgK7Qi+yGnaow3Llv80tSU2Ay1al6+jLvu3Hslap8vXfiliSn3Ht02HG6LVXuSJdg==","shasum":"5345c82448edd177dee52d386500f7128e9ea57f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.7.tgz","fileCount":82,"unpackedSize":5193136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcR/KzCRA9TVsSAnZWagAACH4P/i8NVZLmnoHlgTyiXBIK\ncmrd/n9Pbbe11vJ4R/YfDWlfovCgc6O/bFk8/SkWdAanZJ+kDqZ7tXHm8ogA\nXq2dBxkKfdD6iVSpGmVEduktTbFVWoC9zg3gWW1tVsqkMjWDcKzY2bPewlGK\n3YXO1uxSlrzogWuutOAJzKgXLllRnY1o9QE9KMPiQtyMH/IuD7eroydVs9l1\nQ2eVy7kZpn1CAj5Eb6JSstrBXq32Ox2Z9sTdPgeixmBpslR4pm8Ul5TruLpy\n4hLmlm5gJy6IS2D2BdkN/ElFO1yPbbf9txtQF0efCUJDlDc1RwwZMSKv8K7B\nagFXjanQhwx9XrFJHdaK+ZqrwrN/ukGTf8qaJQEaXvXRiVmk7QBSWH8rq5zz\nDznYhnZZzVuelveR9rcJYygKaFSpLQNSaSDc8zO8nL8tPXlaSERPp9s8JVh0\n7ijnx4Kh0n4ZMg8xiji6TuuIeMF21d+iKuYJgKW+d6XO2SwT2k3IkSsE/qkv\nNLLk7UKbljvmlQykQcmJB8wQA8oPwl4QfRAfPvdYd2RD3MsyJ1JbjbKgYul0\nyWF5B2Ovbyb4n2+xa+jXeKkxU/qxjCLDDn1eq7htntoGbw7lp+qqe+jXdr0A\nBCPbq+iNZ5yMCb1sZsRgKibL/lRqtuxWXYOsCRGJE1YQvreS9EAW+c8f+KT+\n60Ng\r\n=XkhS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJtoiZ6s0mhqHNdTzZIKgL+Nk7suKdgJ088neo7PfUywIgCRg7eU9gBhZMDsFNMYbNnDp/71QVEm3gQpXNMShkA6o="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.7_1548219058270_0.6048597217380216"},"_hasShrinkwrap":false},"1.4.8-updates.20190125122341":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.8-updates.20190125122341","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"b35e9f5b0c3cb62b09f6d84a187f7b9b8a5bc07a","_id":"@atomist/sdm-pack-fingerprints@1.4.8-updates.20190125122341","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-dgB8czP3CMEAYvhIKDJPkrhvUpf2RRyGPZqiyfQdrXM00fDrcdluv7w42EjRTgJHLSNnts3UroVNoRSuqov+0Q==","shasum":"fcdb24036a84d8abd2404687cd1209dfe4479b43","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.8-updates.20190125122341.tgz","fileCount":294,"unpackedSize":12445210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSwG+CRA9TVsSAnZWagAAxgkQAIJo/pqOWIO2lfhQkbSF\nvyEO7cAbGZXX2eKjkCEHKMszMfYXXFGaXkjSHDPPxzUEykUcYsg8rgM0DbWJ\nb/6u8Ew/AEhkQ4n+YBsMchh3aXSozuyJPaINZMqkUc9SRaysSTsBU3nMvETF\n1LEi/SnN7u9TPrt7/Hx1SywH8xOhjFcG1lOFDzOkSO6gKR7wN+yQTdZGSWdn\nBy1HsvryIgZ8W+xflp+NhHPQkE8lZ2xR9T4kmgvb/RBi8X2y+PNr128Os4sj\nOaUAkRPdAZeQPzuC1rrPCNKq46sf5NrCr/aLmX6dJ8PZxa2Ye0U+CfPcE9LU\noZEUcXJpvS5Cs8uqGiDfGy9++PwWPWYQE422Hm3MitN2zTp8foYO8c5F2S0W\nRHPuVAe6zwXz8T11Y1oxc9+uF7ZHnXZdLuOIOG01o4/8WrVIFIwsudYqPQLm\nXXCnEiGvDYuHFyb/5rud+yO19AeHbLymqEzrVsNZRNfpxa3l17msIdFta4+j\nOJ5U9El6FxlMreJ2OtxocaVnTciWAvqg7SNido/s4tKtFhJY/BE3ArviutN1\n6u+0kOtersLd3Vr546Gyo9NpcAheLouyuvRi8V0bBOCCdEsDbyFu+VE60XgI\nw+Enl2906cNglY1TvsiQ2WBH7i6/loY2uGmOpQbMmgMWHlMjjN3YRDD59qVx\n5kw6\r\n=MVbl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdG15ajZwz/RHl9CN4hMh+u/jPKGKCdql1gCMGxi1B5QIhANnp5VfXjr7Y99cB6GhmEaZ37auPuUghoD09ihxSZdTe"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.8-updates.20190125122341_1548419517590_0.14971583429841306"},"_hasShrinkwrap":false},"1.4.8-updates.20190125123722":{"name":"@atomist/sdm-pack-fingerprints","version":"1.4.8-updates.20190125123722","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"69ba72d1e7b977929ca8583bd062e0af14bd04cb","_id":"@atomist/sdm-pack-fingerprints@1.4.8-updates.20190125123722","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-xvs07okBzn0YLHrtb7AkhurzTwJVX0lPqxZfBBSITag61HP5/sJV5jKM99OY+rqq/z19GR0gFdsrECXd2OHCJA==","shasum":"5c631966edd91433e8ea166fcca54f6a43d35d4d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-1.4.8-updates.20190125123722.tgz","fileCount":294,"unpackedSize":12451320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSwS/CRA9TVsSAnZWagAADv0P/iozjLgLmGmABfVrfF+S\nYfQR9Kz34pAZT5fJwwdnB/lDXXCi9HU6s53ew+o/2DWdAPVp6/NKDnuu3/f6\nIqDEYqpue9eT4azylGTrDlNNpdWyKFgpCtIdzc031nUztOLNFlLCRVwZPo6K\nEq3YfKLhgdA6WKgp7uWppBivWrfygjwFu9pWSKd0WnaP/9mHVtaJ3FR1Mvnn\n1pJmGDQ+Wm+EIwFf2TJj7d0d01f45Mai8qDNbY7Jyh38hKdqyelPgPm+tTu0\nZyHm5F3HoYQptj9SVr9tCi9Mf8YU711SaZ1DEaZ7L6z1WmyWcaa9OSSZvHfi\nK6ZFr9iG2uVSK1lEBfBhI4hAsMlplz5N/kKcLbW08HfzCAl8NzLpxZFCitrK\nmT8niZ0b1Xy2Ik8kRMk3PQAfSLTHxqHXBJ2WAwahnwxwTWp6Vq8hkm8VCrMc\nB6NPzqzmgJ8xJ/sVEdtCX00zJIreAYBsJexNF7AIwwL/I1wr4iyMGirn71RH\nYsiSNAp3oOm7fuYndHROP3KwiTLMOfL2cI9N0Z9L3PpjYMEjDxkAk5H09mjI\nh/HgXCcrdIBeGJ8/KuRSGAJPivUdnIXU3kLED/9hxboo55yMlOUHzihcCoqP\nXDgLLRvzo8aRU9rJi3AymeY5VI+SnDy8LxrHzsH49l7Tj0DnRO7/bTVoi71m\nCL4n\r\n=piQr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsq1bkAbiFGA8jpV5afFh3tx3lFcaZtFOXnn1O4paVZAIgXXUBUVhL7lheTYCqYvwQ0ozp/nE5l0PsD0qfVuyNbRc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_1.4.8-updates.20190125123722_1548420286609_0.8303052557046284"},"_hasShrinkwrap":false},"2.0.0-updates.20190125133739":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-updates.20190125133739","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"1b1535d0584e378feaa7349b26e6c11e3897356d","_id":"@atomist/sdm-pack-fingerprints@2.0.0-updates.20190125133739","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-yGMf6h75k3IjJ4mKhFnC+NFzeYRRUpptqj4YMa/VeskfnCuBz/qYL6L/+O2K5YkdzNYNZ3MV6MFNoibsl+nr/g==","shasum":"d567d9324d7b9e597cb3f39988d03dc1c36387e4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-updates.20190125133739.tgz","fileCount":77,"unpackedSize":5191973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSxLfCRA9TVsSAnZWagAAV80P/1pv7tNU4KjPl2R+9Ggn\nrbwwCTP6alAAth7H/E9KUB34g3tIDBcKqN2wvpgtw2Cem4ouv83JnRwXMplK\ncnePRjnGs9Hdhrsbtm0N8cODzvlKtCmK4SEPztXo35nVZrlmu7PfTeOxbKco\nlIRptk+aw+glSUnvtezdHyaNULmv3wXIIGUT92FDwzDBy0LTQllZNBHaH2VR\n3G1Hrf6c4ZUUdtsLp/R4FLRexCgHHAbMhK4uPtj2YLvQzX+2jg9whpzSB+a3\nB5vw6mbDXZZsD42gHVIs3LkrthIXWi3szNmBtpExHTemStAoZTGp7sevsu9e\nCqF01YePE+7Yq8fWDFUcCSX65a5FwtL+fByKhtAZpY+cp0hOimSXvciuq7X0\nR+3DLtb2jD/ztt/hMT0vn9788lsHc1eVYiFSrBKuUzR6/yUncfUBMZvn/rIV\nqmcJGzKHWs7m8+Bi6K9/w5EWgVLL0/CA2tuWdDZtjVijBo/O1k/DYCYvinVO\n7VsKD07Ucg/p42unHEzJ7HKBAAHf9yz7ORmbxRKUK5ejxsjlVPuJSHtOMkjw\n+VMbHZt5POr+fuyRFjwG4pJQpRnLyrYzA1MGG0bvXUo0pW0bQDwb62PnpY9I\neNqv9d2TrSoUEtHpxbDcAMauttJsrhNFviX8o6GyYfK32J0FbbrYJK5ZeLzZ\ndPGv\r\n=2ieA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQujOFMfuu2zza8NPWI2EKB4ywZU2XhLJFFT3pWDLkyQIgUKdvOUwjJSiA3Kogqx9XJ2LW5iLQYUsdeHtqEf+VAfU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-updates.20190125133739_1548423902331_0.9290054938467194"},"_hasShrinkwrap":false},"2.0.0-updates.20190125141235":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-updates.20190125141235","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"5a131f9410ee11a0919b2aee8aa5558ee3b3c878","_id":"@atomist/sdm-pack-fingerprints@2.0.0-updates.20190125141235","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-RvSmyCukeq8Q8GFZeMkqa9/IroqreBgGP1hFtckaqrqa6UtR35ZE2nMaF4824SxS/840VYOOSpIFdiPMLH2rMg==","shasum":"3bb8121f0be408d2733444c56ff91a5a8bb62640","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-updates.20190125141235.tgz","fileCount":77,"unpackedSize":5192735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSxsZCRA9TVsSAnZWagAA+NgQAItsVMnXdrp48Wav1fsd\n2QfX5kLj6wbbV8B+lFm+Dg5wddLb02u1jTJz3SjIXp9Wsq/XUWhIlgv7zoJg\nrYNETYlyFPOXOneK71ZwFOMF6RiNWjiL6XdskIViqmzxOEFymZgasoEnBWnZ\nfS9TeGYfKoxa2FtmUHDXWkKFdlSMsTdNJswnyc/Xd17e5n6Sxgt1HjpG8B4b\nFCVjoVF3IylD3cPQv+Db2mvS6tuG4pMYlHe3guds17643LleRRki7//7KImi\nyRVCXPZ0tdzs6ujUCOKICBFwGv3kxT1CPhhS6C73vFyhmLtlKKpP9UQa1bki\nKaEFbWzBONdDBgMqsc0F0W58Fi+/+uoB48ni+ULHEdaXvKNEn6jSgzW+MUP8\n9NkuQ6K2/lzox1eWpCAQPe5VH+9Yo1hhV5l/iF5Wzxt+IBpRAqtTSWy0td/r\nzqMG546SIBtiphheWjP/IpTV3U1GY2CAI36u64qB39xgXeE/3wE0J7YsGaGz\ngY/qsap8ZEh+aTUhVRzCG7OfzmLxjeWvSuuzegf/h232xU3rKasXs0opp5JT\n10IOz7UoTkXVXo8GSTbS4c5bwUQfJ/tDJKmCTUNWcEkpnK5ryLLe0auldHP4\nyV+F/ChO9t4/YStg9AFx7BVInc4bIP5cRnv3YsnlRzdAUVfbgFWX90zK57/X\nj8Pg\r\n=Xhnd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFaAp2f6GfCCEfIj0P3S00yuQdQTNT/oZ/H0WuNliHrAiBvJPhm3dU3RojiT/gXEAgDorBBKqQa05C1w6VonRLWNQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-updates.20190125141235_1548426008480_0.8492536353473505"},"_hasShrinkwrap":false},"2.0.0-updates.20190208003156":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-updates.20190208003156","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"4398799077b663e65e2988231c03a0bd313c4981","_id":"@atomist/sdm-pack-fingerprints@2.0.0-updates.20190208003156","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8+6RWPUedKTu8wv1MhnUsiHVnEpzM9fGvv6JyVMJj7hKZUSZWmNUjF+IbvJcQnEQ5NGFRn1tBmnQYyKBPi82SA==","shasum":"7b0efcc3452bc9a1480fc0079b21ef217e47a7d2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-updates.20190208003156.tgz","fileCount":77,"unpackedSize":5193430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXM/bCRA9TVsSAnZWagAAwzEP/jaVA/TvBXFqta/UaGvl\nXOhDUV9ZChK1epDy4GQHj8yjBcQZkn5YLi5PpG1wWxWtG/1NaEk5qql5xLxf\n+qL/ojT4jgjzaeRQxQ3NGcDTa8zaz5Izw8zZ7oPP2inRiBpyUg3NeSmvTjWV\nk2aLDISfcj7ZlLVLRqM7ZKgVQGL5u01nR2yhkMRja1egGlXcQHCKq0JGtXqU\n8dT9ULL+qTg5qjNfmxkXfqUarNiPamiVumbie56iwnHMqERHIQjgFuOuxvYy\nUoKZ3LjXOOUWlKO3qWjucFkSgEsapYnfpnoXhSW0LwdPuJzFRQbzxfEmfbkp\nfy4u0QrVldFVVKBpRVIBRo7KSkCskZnRxn+q53ew8CSWTIrQQpwVIho2zYVa\nMt/v9+3nubVutR8wTk11F9qeLG+2F9GfRHIStRKqmwfU7HWUYILhOeE88xED\nL57u5gQ+SbmSaDvsKzVgrV0IO5FvPpeOKRyi8508V6LXgM4OXSj281zggKvj\nbXlsftayjp3CUTgYv6CPNGIIy4CjiVQR43JJ4di66vDIkN1qeDty9CH5l4Uw\nEBOmxnv28lvG3FZ9eh5eXDTs2pHEKIKeOLde5UXTUIzakcLQgxLb2lgJePoi\nBFW68uDqaS5WRFbkDp9ErT/Vx8kPr6r3ZhKu6HHbNEJSd8jCXPaTI2mlSicG\nIZQ1\r\n=BAIi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcs3MJGQ+oDpEt0GOgNfAEVIe8uejFD0cHSYhqvKnR9AiBnIP5Jv49E2J4D5QFr0vM8TnP9oAwI6AUv6W4whA2EUw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-updates.20190208003156_1549586395044_0.41335947640561543"},"_hasShrinkwrap":false},"2.0.0-master.20190208071133":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-master.20190208071133","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190124132630","@atomist/sdm":"1.3.0-master.20190125112534","@atomist/sdm-core":"1.3.0-master.20190125110602","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"a4b5ed9eb6346ed982b8186c395017f5b8f10922","_id":"@atomist/sdm-pack-fingerprints@2.0.0-master.20190208071133","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-J+Ryasb25QubsNDVmRnTvd5FgFVrA0JCOyZsup5tWWDhY1hegcuAtLcyFjE4akc0/D0fjrHCAuo6LLxXXn4Syg==","shasum":"fe4ef9a36e2eab37a2c8e22eb00a762b37ba303e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-master.20190208071133.tgz","fileCount":77,"unpackedSize":5198472,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXS2ICRA9TVsSAnZWagAABBwP/R+bfl97Q2X1kGVc7RGF\nZdC/G/uLVt52gN3gYUwpsxCockcNJAI8C5AmlftlbL71kpebAl7vm7DEtvNb\nrKKI1x/AuwihLYFpkx3qwOTPcMF/fKG8KpEppc9RmE6zvb56VOKr2pQGc6F0\nDdf8JgeAkxEmHUxXilo+R1eKK54EjReJYkzg1k33WpPk2WbchNuvKKqXObTx\nC5H9d7EL3yIYFDK20EbDo3aE7hk5kqTFUXPKGThfH8RhAVVh8dRB0wTxzO1f\n9WpOleoMy9b6oXOTp1gAHR/HZ1PVq2qm3q7Ptj3IyHW24NtVFGO2lmW/Gpam\nA9/vVmuccYhlDlbSiQd9cnDoVXylwsKWuLQFRH2JfOKXqlKar589YCPOdfJG\n0qxXdaBj9NZuwlpsCNsnyqAUZXMTqsS508jOSIuvpeq6DhACZagYWDPmorkt\nnSjgEZig2PIbGADcrwUicXw/Yfry9ucxarGnoL3Uyvi4gHCTx+/zv1ti0PB6\nu+ybBkAZV/PeFYXs5StmlOQB0TuupsiE8eVhw983ja2EabHqBZ12smH6Gyu2\nMUYjrEEcV/1gfXJEKt855q/1nDIfuQQDBhQtdefLgGzfoa9NNLm5k215V7vH\n3fcDI2H43Ck1h7s3iwSTRQiKUN2gq+HmYGcps+fL8ip19j/bEcokyiXW2hsT\nw6OP\r\n=nMG6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANEGIMv57oZ3+8+abeztQgxEOv/W/hDvZUnqIipcG2eAiEAjw5QPZfXtMNnZqMhTYerHzpI7zp8VqVsld/V7uOYnxA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-master.20190208071133_1549610375393_0.37788869878885145"},"_hasShrinkwrap":false},"2.0.0-slim.choices.20190208210917":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-slim.choices.20190208210917","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190206192652","@atomist/sdm":"1.3.0-master.20190206205235","@atomist/sdm-core":"1.3.0-master.20190207130924","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"25972f60d90ee28f1a3ff636e92726baf2d2270c","_id":"@atomist/sdm-pack-fingerprints@2.0.0-slim.choices.20190208210917","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-BPYIwX9vPJ0yojxqEOS33kZxX1GISArDiQ1/YWJNv6p49VqvLufj58c+f0KlSGxqyadH2MToR525mF3RBpmgFg==","shasum":"6c1440065568b8bf773e97830f52799fe3045eed","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-slim.choices.20190208210917.tgz","fileCount":80,"unpackedSize":5201898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXfHJCRA9TVsSAnZWagAAHfQQAIJZebFLeb3VjCO+hZ9p\nrhTyF9vgXM8VULUyGl2McA29Pa985q8hx79CjpqpFeGrrVYaLL3t+bySX2bY\n2z+OGG7YIKv2cC76v/PRgieYBBSMGDeI54APvSwf0a0kMdRJPjVxYD7b+qSA\n9LAq8+lhdh7h411yTjeC7oU6QwFYsIp0ns4nX94qpsVfTgyaOqiabDoIY34l\nMEkrK2p3myS1D3Ak8iFkmjYRH5kN2arFlZFPSs7Dos4tx4aSpe0uoIgZw/NS\nODuRbWJlmUnOh/jy2ko/pe01R1Me2TH0gvd39ZOSfv5KZ0mZARuCPmt27b8Q\n3Rc/rR5zHI+0E0eI4KAtgRGkLk58CWjwjKKFnfr+Jnv+esSs5vILA2Wdrkyo\ntibxZi2rpkd+AOo8ePfCvq/s5oDf/StSAqqKrxICo1nNAHbruPTGbeeAaHF1\nQWtobzJbfm3tSr4e+twIe67zsPo4GnpByH2yGO4CRdQxXwabI5SK0ijCPrYS\nxv6agPvSQzzNKEvTaC80lbll+exc+ExLdbmlHNWKseosXjmCevkBAyR9l2j3\nCZ7Mqs7l1J1RMWi7cxi6nfu31Jgn8IWlvugecLGev5UddaVeVBtxBPz0rjYI\nTvM4rsRQWlIY242t6OnssdE970r4aw24jkzeVDam81WNhJN6qmSR5UoIEyNT\nBoNI\r\n=qUAu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHyXQ+tpUEYSjPOI3tDl+qqe4HRwSd4cps/3U8ExwNIECIAH/ax3zz1ydZOfyKbcZimaBZSJxHZdz7nyGY7lu73p9"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-slim.choices.20190208210917_1549660616682_0.2419672438184428"},"_hasShrinkwrap":false},"2.0.0-slim.choices.20190214063425":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-slim.choices.20190214063425","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190206192652","@atomist/sdm":"1.3.0-master.20190206205235","@atomist/sdm-core":"1.3.0-master.20190207130924","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"72504679ded69edc2b55c63eab579c56407fff3b","_id":"@atomist/sdm-pack-fingerprints@2.0.0-slim.choices.20190214063425","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8wJZ/0yC7/RVYn+raMgO+l6wxSmP2SBUZlZJT+ya0GbIykhzhCRlmN2cPD0ooT9tkz7JA/11lvxxrsDyM3OqdQ==","shasum":"f72798510d6d00b88ac27865b73c71d7a6373cdf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-slim.choices.20190214063425.tgz","fileCount":80,"unpackedSize":5204573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZQ4iCRA9TVsSAnZWagAAEtMP/1PQ7tliM3Pxk66AuJ9/\nwvd1PT0UMkkpopgAFzZg+zhkleJ2ebbsgVkC/udGAZgfB3ZiuLfuLIo/wSV9\nA+KXlazy3AdKVqfxc76eqvVEafxpIP+xn0h+nJZe9hEjwHdE41qfId2t6W/S\nGO2XBFPn7reECYPGvUriA751ql91mpV2PsX/o9Js4YIzY9HYl28F98vkwt1B\n+H+DEg6OtaE0J00UMbf7BVlsNu11JhrnKuDr1540bA1cgnoDGaCi32+Jr+Fg\nfYQSYIfE3NlpiteFmxe82y/5Y4bAlwUDxvosWd0YK2ILDABhZcqmHdFc9Yxl\nkgDCDVUMS2dPrKRArXijrgdGuCCW3edy2keY1DxFLHQdfA5ejqf9adBH5djT\nscJp1jv8thWeY5wc0hK4eaWOQq71MEgfyD/EpW3jGIFFgN+w1jsdu02S0WVw\nQKN6Nu8R7/Wum2NdwK5fvQKtm0FvbiE6wal4Uq9yoJixflB6uybZ7+XGtLZ8\n5039wTSqBfD7ONTwyVPPwbD1kF/jz0l2kaqOVU4D023TqUyqPpPIJZh1VLHM\nkbj67Xg50noNJviahxUTQ6/SHPe6J5r0K8AIruzmPuKHkQayAyujoMw3upRi\naK+OvR+/BxAo/w9kZ82w+pvPZhQCYrbJAprBG7QDBY42WkWukhWYeKeK6P0z\nNNsZ\r\n=kAt7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/LhvZFtQwabuUfRhqJgvA9M6xxRCYKS7RMSQAK+O7kAiEA3zIlSu8Yj3VK2qZOdhu8eFtr8MptYcS3lSiUkfYSf2E="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-slim.choices.20190214063425_1550126625749_0.970012387014143"},"_hasShrinkwrap":false},"2.0.0-slim.choices.20190221220528":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-slim.choices.20190221220528","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"1.0.1-master.20180830190736","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*","@atomist/sdm-pack-docker":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190206192652","@atomist/sdm":"1.3.0-master.20190206205235","@atomist/sdm-core":"1.3.0-master.20190207130924","@atomist/sdm-pack-docker":"1.0.3-parse.20181212031606","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"0a06f428a6424080f0ed1e8671dc00d72c58134d","_id":"@atomist/sdm-pack-fingerprints@2.0.0-slim.choices.20190221220528","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-5JN3grxTpAbZxmetUmDMcmZq993M0LlKNDqGGkyMNIiNmCh7FXGge3qc2jtLXfm2k8YE4Yf4GYjlEDlAci3+Ew==","shasum":"f1715619df081499bc4e911bdb58a6d4e2557aa1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-slim.choices.20190221220528.tgz","fileCount":80,"unpackedSize":5205750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbyMKCRA9TVsSAnZWagAAkHAP/3gJAiQPzl0oQK3hJzmO\n8A82CqkUcYooA88K++s6JJGMnTnxWfYsdr3ZFrrm0xxW+dnz4JbKd08QeCyI\nu3tJiS+8i1IApDhvsQlu08IeE124qdFYXWuyJkIf0AWbZpV4wqBu3zsOuAMe\niqyqbQRW5HklVTAvxBffOydo3sQ0WNRp0Jf+po6HVVaCEjM3L3moad3bbUc3\n6v4Ho36fPKnOB3dMENP90fF2ssjguoOFT5fudmtvRvSEq5ucUtYX1JC0+3xp\n7xWWtbwHoNY51IzOe+sqoZosWVu4fF/XTUAa12w882B4t4H+O4vGAxwmhvOO\nEFRYPUFI6dFGRSrhptn0eWPaOC35OzdDc3L8YMmw+3qFd0Yx/KEtoK9rGncm\nfeZGLgixneV1lPAk3yDMxtwFYyPSiARKjUHqUFsGlGLUCICwQa2g+qW9dfF1\nrIzsIGsfvBz8CjI2uPoHcnsyjebSKEFfBNA4LPX6hoKK92VkyVoWjO+1fGWI\n6H61CCxgG7rdCrF8dBwGC+32K50ThZblIlgKJsxhwhjk51eMN6tmQKSEfxmg\n1RL1vxXgFJnYhQ5cG24gleBBtAfCSSDXGunZTQJetzPOkT2PXLgcKcixQnrP\nYpjipGtPr+Hpjcud18v8gRzH38Sb1aMe4BI3AuoPfZnMm4pXoOBQzwO0/2HQ\n9Cie\r\n=LG3S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgBLlbUrxek6dvGJ53M6HM0J1C+Dj306aDm+qUxhXsPQIgbcXXDmRfdA/tw3vQJ+FlJNJgPvknb2fu78ZmanAh/ik="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-slim.choices.20190221220528_1550787337932_0.24047807120474118"},"_hasShrinkwrap":false},"2.0.0-atomist-update-latest-20190320185814.20190320194833":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-atomist-update-latest-20190320185814.20190320194833","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"d4fe8b3f8ae21caecdb4cc5481c25e725c6a6b7b","_id":"@atomist/sdm-pack-fingerprints@2.0.0-atomist-update-latest-20190320185814.20190320194833","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-8n2ImJKj1AAacAl+czKem/GnONhT+hmktk3LZcQAHfd8ytgrmibgqgU3KEXL6FGtzymKwofQ5+YEaFcaFHRVoA==","shasum":"f1be209d2b3dbd3282ff904bfc2b61329e4892f0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-atomist-update-latest-20190320185814.20190320194833.tgz","fileCount":77,"unpackedSize":4900138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckpwICRA9TVsSAnZWagAAmrYP/2WcWlq+A8JO3f2p9jkM\nAk426mZNNXSwWtFka9M5sjHZeHkSjgpCyANeaMSeNYtgGQTwdQZpXhzqAbzH\nPYWbYk9zsNvAkKpPnUVm6QomgVF+dAe0PZzA2k9ZBj92JLfLTxufi/w6+nvM\naIVc/5LycTZrasFw5UxBGaXUJeI8yAExwi/zs369jgMP3F9PDHJ6HLglPbgb\nGfhl05kHbTcErErynwpufpqJ1YXqmrDpU/PRx/lnZJ/8YZP0lu6jW/rn2rQ7\n3kkIknTCQI1ndzRULoZ/DSBy7E/DEJd/pl649jNLRv2RNpeXmGl5LqZTH7K0\n3DPxpkQNwNg2drXZG6n3au+xtSAW2kJK45U1iwtMQ08HqjDlW6YzApZOCPIX\nKvUAR8IIucT2UhrDOzwqDEpvqr2TmcqZBVFda/RrDDWRKSGuOohQBfp7oP8F\naR4RkcyoeLVT72jjz6c0nqorjQJWzmviZRiEKBBuIsnHCRC8+0Gf8qIJcVAM\njNav3UkL2YNyKgVynWVmLAsbVjDPh/gGp8gWNxM348Zowxy6AnMU3vBzinki\nEhxrvFNuR/ClvmZHnfwpwLXHZqcNC2/xKKB5VEvuM6r8yvXvugqWVqyYXvRo\nc8LcV+LagpJw0cAQD+d1VgqwLvCfOq42+/FBabhDeYtWgRzPajt5Ro60+l6P\n0pHo\r\n=ihv3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLCcdJ3VAVy8la/+B0cgSUZxDwo1uXd+A0+2bByGtXLQIgEV89AAhLgRYS6nVv4N5XYqm0q/3F3WUZB5XsjFzIuek="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-atomist-update-latest-20190320185814.20190320194833_1553112071953_0.04517675739052507"},"_hasShrinkwrap":false},"2.0.0-master.20190320200436":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-master.20190320200436","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"8e4fa854b3bf08ec1e5f74e57ca7816fb46b26f6","_id":"@atomist/sdm-pack-fingerprints@2.0.0-master.20190320200436","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-SLemp4W1xV7+nUSUrp0cKnLujgZQ0dtxegYoMA1BCoeS9tbqI/vFmnA6ZyVdlWTwjt41rdhDUYwTQNXdgk+Ldw==","shasum":"3c5035c1e4523bf432da23e0d22e88955e099eb2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-master.20190320200436.tgz","fileCount":77,"unpackedSize":4917572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckp8iCRA9TVsSAnZWagAAHegQAJo2afHAk199rFtTV08A\nlEfL1GXiIp+M1XSc1lFuicuXMxSvD2/0Nkfgd7bqKVHV9N0U43C9iIwuCT4a\n4vn5oRFFWXoMY9ER4f3JYFur28jKEyIUFrVqx3rBThryRyR15tGTm990yZuf\nC2ZtqA7Knm2v8+vlt7YStLdAYXqw1U457VzQKtQPrmbrBbNn4trrM/uWQrwm\ndbTGvTXalU1Urm/0a5VAYuSexn1wSt48WtSJLN/tmfIyEkT5LvGvJmTKwLEl\nv/+eIsne5r+OLPUM3ozHeC7clxdC2H1x7rO2EIkmSPs4qZ8ljZguk9V1VBJ2\nBYErFIYgLhyJ9alXPlHBVsEczOesNZbJ0jm4STsrYxyDhgaenRFsu9t2x1gh\nVHo+mPzWN7exjr5SsVfK/F7wiS8uAugocq9AY4x9b4U1YC/QHrm7E9jk4xBj\nHMbaAAxfu9sGiF5rObRCKEt6wHLscBlX24YPfYP4s5cL7lxlZt8SUBRaHSQs\nTToLkqtGnE72T6e8D2imAYtTG1z89IyWi/ya3+uMXdyDFhTwbA2++lbVZEEX\nPW7dsuHmsrZ8OsfRz3sOmhNnFHsm+QtlX+qNceY0g2UcXFItzK/NVFYQ31Wm\nICrxA5SLvQfW9djYPy7/QLl5+6sn7Rt4doVRvt2Mhbdd3p1yPfUUAg6Fk9oW\nTPzx\r\n=W/3Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFakfMnv4BxeufKWvE3gdndbwVuTCDB1DPUK2ht1NQF8AiAm/EHmgbG0uFd78Wid5pTzZiCtCwDslxA50QUbgpUGEQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-master.20190320200436_1553112866264_0.1184986673065338"},"_hasShrinkwrap":false},"2.0.0-master.20190322010508":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-master.20190322010508","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"522b4d0c1a634e237262b3437513012bbb0e3b66","_id":"@atomist/sdm-pack-fingerprints@2.0.0-master.20190322010508","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Px5hYA/uoGL9dLeAGqgyLY+LLTBu5CRm/Ly44QKeyOpmlhHBiovNICmPYQjcfA+KTHixWutgCVKm4z0cTwX7Hg==","shasum":"8d69b1092fd9746fab416ec9b94711a6261b8e76","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-master.20190322010508.tgz","fileCount":77,"unpackedSize":4917799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclDbfCRA9TVsSAnZWagAAzOsP/3Kf1vKTAWnORFqtfpAK\nFMRoW28K2SOsMDIh0NBntH23eXb10oUYIKzPJAveEZHqV2p14FbE/72qC+xW\nmsL8AgSE2ZZWqjCgwtNeCTXWQ1H3MO4T5DnijF3QL55nVMp0eQnv8MA0dkSU\nxJto+hpAUkzBEUQufXxJbgcPJKASu41aY3tNYFlVb1wXYU6vNkgkvJkIz1fZ\nFtO3oMzJBGoAWlXXFbja7t1uPopZ6qImLz9qMd2mW2ltCeVnm0EKKXRkdrLq\nnH2waWTFBtRDj1Ehs5iBxDyRFmnu3oQlVQw9ykjT6g+LOlLR6OyiZN6eledh\nM3TDSIC9c9C7ROtl0A4xyzjB9YyaXt4Pn8n2ahMoSiSIm1Hjz5ev02ASnYa4\nhwSpfzVM3ndm9Wp0VEvpwFjedsV0HCUxeGZtvksT5+Jwgtdh0lxm7Ge12iif\njovHQSw1HpE30jEsxzNZzozPyMCTVAqrxB5znpnUFeSJn2zUFGdb/UAJkjlM\n/4898+LOSsiSzbH0Iydk4qM1cmQfFXyGVO7J8Lb4cQfeFa6DT0tslgwZkIdt\nQiHS1kYj+mtarEN8QsISe33eANiw0jC1et91OF+/qNhmnPjw9Y6fNTn/eo0t\nts7K+Sev/iQWJXMez/24V+ML1fQwenk72/cZOceOtcFNR+z30rztfTrwtGMR\n8der\r\n=kTZf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqKmlqBlLtQdLNgUYv2XYNiHx8jq1/YbBI1y8aAui0fAiEA33BsdMQRsqZlY/hb66p5YB+GxyPNaeN7lHUnmK6c+j8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-master.20190322010508_1553217246366_0.6396024530915414"},"_hasShrinkwrap":false},"2.0.0-slim.choices.20190322021548":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-slim.choices.20190322021548","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack\n\n","readmeFilename":"README.md","gitHead":"de78bf80d15b4317065745711de4a862d5c780f2","_id":"@atomist/sdm-pack-fingerprints@2.0.0-slim.choices.20190322021548","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-jJ00V2Zz0F/p0OcsWyzo5xi4Z682IDXDDjMKOJLTv/LaIDDXPCWoqheYJtGeaII1ZQJJl6Lhu//nb2D/cdTdSQ==","shasum":"b2bf056a8a703f61782b30e39cf1c3f617d450cb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-slim.choices.20190322021548.tgz","fileCount":80,"unpackedSize":4926735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclEfSCRA9TVsSAnZWagAAxMUP/3j6n/lb0Fbucu208MKl\nkoDhGyXz/McyyjfPtbVwN8v5Mn7oPdA0iEuj+qJ3TUXhi/Vc6mOCBZXoIslH\n13d/acPEmQWubUZz5COLANyETo9RSVhBOIeBma8ySOtKFl/eTIClrgSwwtw/\nVEjEPfx1hRfyNzW08WZIADhAwpjzx1hQZHykOKDCmgqlAp0XMRHI0+oDTcR9\np3wqF2TK9MASNSBdIk76UUMgetJ56kgnhTj7+fx+1ytULF5W6+VKI72HI1eC\nfL9k7CBJ8+pR0OOxFfmbZfDmeve+mDg0YfHmVEEy41X5uzvdIx4XFRzreX2l\nG4gWOa+2184X8TsmCTNyRKDDwAF7+Fe+xcKqMznGfZM6Yyc1Nw8tad8O1M3t\nieZUbE9nii4bWFr8QEnalfn8/8qy6l3cGNsx37plzYqpv2uB7Eb4xTpFxQgG\nu3k1vQJBb9qyaN4hgjnt1RJ3MCvD3AXejOPLxk3iqtuYccfZLptsIP4U2Cif\nK/P22YAtcwO2QtSNaMcIG0FI8GonR8GBJZlLeHjDiKmCACIr6z1yDbG2HJHR\nPt3eM+Cg+GasFj8RL6cIJE1GjQnNEPEbrtq9iS2F0qF46fAmfLrNoQ9lmSdt\n7+6jkM7PR6ku28YIxVDTgHZNbsYCw44YaQ9BpDIYfow7eUXMgywaxRS3tG3a\nK4+A\r\n=eRsB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF2fqKz6W5ffTUh/PY8agV86HfPu24C+QAhJsx5ie16gIhAIfJNR7VGcVlfndrPupJuTuz3dihTNYO/kOVH4VqlUxw"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-slim.choices.20190322021548_1553221585717_0.3671979796261027"},"_hasShrinkwrap":false},"2.0.0-master.20190322183828":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0-master.20190322183828","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"380fc6c2257d1423f0d994c4a761f0d56fbaf1bb","_id":"@atomist/sdm-pack-fingerprints@2.0.0-master.20190322183828","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-lhdUGSYCo/AOvV0TIg/QmmBOeLe4o4/7XyX/MQ0lMfIcysqrrcONPbt/GKiswCBzd/GVgbMy8A+hE7k5j0zRXQ==","shasum":"cba45c0304aac9d606159e8030e90d6d43deefb8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0-master.20190322183828.tgz","fileCount":80,"unpackedSize":4927052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclS3NCRA9TVsSAnZWagAAkLcP/0wC0uD+C+sbJCM7M0H9\nftnOakahwLBU1XEf/jSfS80G6xGxFW4ZGCx8A/leeJLhnZ8bHRFYf+krd8/D\nHdrvvUa249o0BvHVhyEvmjRxwfPvAhN8oLV7ICvD2/qJHGxyvOOa9W0M4t3e\nLZ42uULoxnempB7mn89OS+ZjOG1W1yadEQdphnOua3XS0Emts+ekjD8izgYp\nSHnP5EfPVtzwOdUCEfJydwcyf2eHofDgCBqDnmrlo6TpQH+o1IfTZYwABcq0\nWIzGri3YMe9EpbzFViOtVW6CrXqe2XhhcnQMixAxIoJvo54xWm0/JcJv1lUa\nfF3VfUuDeBs/nLakh91h9HM7M8Po8k5677lAfe5KtJPst9tZzj6eOu4WX18f\nhL4C72FMfwNVS1tItEER/d+ecQ3k9seNqnn9U8rAhIP/EArKUZ8DLHkYs1fC\njGsEqFzatyMGJjLCZ1Uobhg1qpwCoA0zTWhjztdthnBQ8GdYuIsZNVl4Vh42\nEcCrSZ7vx/OKU8Hhwr4UkaENOzYwfbkWXDGcjctDzwkeHKHvydcV3wfTLRBF\nbWhuNthdrjALyTaBzOUMsDbP6lNSlWokL/GjBye5mKzIITPY0tf3z246PRH5\nk6Mx+21AkFkUHUXRYPJc6WdX29sbECaBjc6PL6y6ub2oyT0Ck+PnGgAJzvwc\nvCV6\r\n=8Gw3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoiOEnizgaTWJOuj7PoGWZfGYTiEVaiimzWLKRnDc7OwIgf/ZiDX/cAnqncbm/NR+ol1uz49futy6SvYm1IwYGKqk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0-master.20190322183828_1553280460874_0.8857578181734889"},"_hasShrinkwrap":false},"2.0.0":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d87ec3951e729c85829db9d9dd3a389e11c01767","_id":"@atomist/sdm-pack-fingerprints@2.0.0","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-XvFPCQ8J279V0VgHnGiN2447wqXHjLdduHWTAII+3YRs2FZrMQpiBJn3PjMhCdZDAWsf3bMTKMMDA29zIE8e6A==","shasum":"6745409e7a21762137108ef8a645a35f74fe7e09","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.0.tgz","fileCount":80,"unpackedSize":4927030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclXmPCRA9TVsSAnZWagAAujEQAJH4vy+q1+fqV8uREpQd\naSBI/IQxAcseVvX7yvMbEdLs9yb64G2DfdnnhskuRsBQ9mY4mc7Km3tFs8II\n/f6+sk85b8GOucJ32l5pLRffaInZaAdRpsK7MKy053zHCBWCPonGPJbSxxdi\n7dT0Ua5MH2+gFgnsHg+AVs+5QN6zd4sxXWsebDRNqi+Yy6TpJiepKxtjBYS0\nPtILWxElfybSCTbbpcCz3ZtuGFQuNeTpcC/NHwRrmi0DnBpeWlsTENbbVBIv\nmPoSwSMx65Lyx1fEwluL/wLZmFhaAwX8z5YVRuIfJNEI/J4PkL2pzYkeho1V\nXkxTMaY5ekRwK1DWAZThI5dOukLLKFO/5EDHoxGhjYBOmvmEVgsoYpC62h/4\n2YNwOb76R2fjaNFUFNV10PQCbXrnNinqsuUAFYOqq4aDBvMPeypiGtoqV9x8\nuV8Ob7hJk7/jt/l0jMLkI50eHHn6PQ37mKXlkUobmiGXb3uOqPgm5G5p/4mM\npXYpoVKehLP2xCE/r7RHPd2nQV4GYAjdvOF74lNFapjoWl5AMgoRYE5vacyS\n08fmw2h0ae77UGxoxKdPkg02/Igi7ifQj7daDcVjxfFCqesXUv1LGAg7zAPK\nA3doe034m9wkH+3vTkmNgl8tYkeFAXXBauFQXxjguzBd37ljHSzv5EbavHnw\n3uQJ\r\n=6p5T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyUKJGUNLVsTsNKkqKmhvbqDDu+B3cun5hK2uXpmn5gwIhAKkFZiBDsIOaEPk0RhFF/UTfCnVQtMNq16bXWf/lsc5e"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.0_1553299855197_0.4211396950505979"},"_hasShrinkwrap":false},"2.0.1-master.20190327211108":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.1-master.20190327211108","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4d7063d5993be04a7c20d54c4bbae8d2a0a83b61","_id":"@atomist/sdm-pack-fingerprints@2.0.1-master.20190327211108","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-sk2HHV8kpsm015IVviTYR0rU5p946qXUcq3RrdsyMThVfJhABGN5c2Vj8zmOgCSxOzVeU3VBMdXGDewSWiU2KA==","shasum":"c516b5fccab0cab0dd159787fb6e8550700707bf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.1-master.20190327211108.tgz","fileCount":80,"unpackedSize":4927448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcm+k/CRA9TVsSAnZWagAAsmMP/Aov8q83JknPWccpErYZ\nBPil4s6BeMrr/d8eV2Zb3bjJKwhXmEORzMrNYONNI3ydwuOAMtcik7MVpygl\nIEH8eg6H9mvE1wCVxs1AZ+6Oj90Orc6/T9IK6JzUG4bKOt7zDf8n1e7WoPlR\nWbwoECtpe5ovyiQx1WB9R7iQN1NaXuHWWylV7VBSmF3VQBu04k7+sayTHev5\nmdELuiQjNgoaYvuuon+HXzTQ2/jxmwmnZt/OF4RozVtN+8EdBD8MO2jWzKG6\nldMoCDkTmog17NDc1vJbScR7Y0aGj0qSBrT1HEicrRNqfIo0j9Bfr+1EE/QK\nlH9XjYk3NhC4pRfvswsiaxsG4cbadb5QiFOV+VC93/F2YQnJBzxAQAVDcuSn\nR1tb8gONuwqvnbcMSyfEZySSPChBHdLaF7Wt3Im/cqPT8THk5nRyDdybG0sW\nj9YE7zL3DN0Y3+vJO1Ji07qtAjMELjH8Zlt3oW6VjDQRrj/fUFfPBHyCHhA+\nRrjEcRXe3OnA8gIJ56H9hDRMTDIBy1adYf0WVsd3Etdt+mjFedAmE8Gfyp2z\nP7vO8VrE37gfvMsf5qOv8NOy/GIf//W2KgY/2QvhWoc9Mg36JLIY9pXLnKcT\nRSk+b6K9RdklscR9GsJD8fMPSKbtEq6dhrO6J19UEHcafeZs+XNCourXtEmP\ni06J\r\n=m7xp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkQxu6zjrpIML9Auxb3P/TloUVnE76ot6+1xpK821K+gIhAMUZqeju52HHq/1Fk9Q04KM8Io293x6E7SyS0FZiF9Z+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.1-master.20190327211108_1553721662606_0.7574510044875604"},"_hasShrinkwrap":false},"2.0.1":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"627efb1a7494f26901f3f0a49298150c3d68aa18","_id":"@atomist/sdm-pack-fingerprints@2.0.1","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-WyWc1O33W7zymun40L7103VoxGcuBX621WgBuKc0zdkPc8iGGG8nA3fJZMIfkQMJN1oqPM+byiEVdjXu0PJENA==","shasum":"967ac90a72207aceea917e3f75e4e2ba31ddf46e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.1.tgz","fileCount":80,"unpackedSize":4927426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcm+7aCRA9TVsSAnZWagAALz8P/jsgO3t/ggG7kIfNeobm\nZO2ddEYI+MQmyDrgRXRrNtZKGCVdPZu/0K94RHs72tDrMySUkMRbBDhvaGQ9\n1kCRqb/YZZsOsDrucL4SFdiNf1ND0BDrr1X5Ded4O9WxcfTbOI0xjjmmtTEb\nzdWCY5ot5lzVNTfgHZzUdQNZBH6L26e2HCSvf7OMPKT+EXqW7xRb0u64N9UZ\nc+qUwxA97zfYqOhRIW+e4cFn/Xns0L586oUAZhk8J70DQpo6oHhNxFldTw73\nCejo/ipIIeSW4d6RDWOu+s8UVq8GVN8Pjh/rhIGF33ICjBGQoN+31OFLrzkJ\nBE/ksmA5oVoaCWqSzugznFZDqib2qxxidqWZ1fHzsqKYNkySmHBbku+9EPMB\nnfHEvfp+3SZD74kqwPJuRWnXxnuSNLNZmnw0TEvRskG0z/6kunKRklnB9L6L\nvDSRUEZ3m5fZtuFp8qNsdz5gRQ2xijCZqkL89p7N19HplG7zxqCO2mmjjc+U\ndh44qqdhgM4op3I5Cudua5JoluOCYJRkD88P2o6wj64wp6lPFxNeep3B187l\n1R5isxfAwL2kPVuqzs3WgAAcPKNTdAgOE1Mv83SyfZVcoqGU7FVGfSKQBcMd\nRhwL7TOQK5SvxiMjujMrEMHBjjLPWyPsyvDnAVMmKWSaLzUDbvijIAS+4F8s\nX4J1\r\n=R3mp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/j47H+hRwDMMH3hloF9LoG1Qd1snbuqMLexWwSZGvOgIhAP5WoVvJoPR2RJSr8ZUbOb+AE87r5qvY8ghNUkNzkJj6"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.1_1553723097800_0.7878513135616252"},"_hasShrinkwrap":false},"2.0.2-master.20190329005645":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.2-master.20190329005645","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"92a2a8956b0d1ab0ee3b6497ad816e81f464fdf3","_id":"@atomist/sdm-pack-fingerprints@2.0.2-master.20190329005645","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-f36Ztd7PNeN+uiGk2PgzvwNtQoZwac1eOJ+HNYbFj3TNaQ4zHnh3Balm6wfXR7UCyxeeyYJKfIquWfC6k0wKZA==","shasum":"15e6e81212838b6bf0900ee554aa1b787429b63c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.2-master.20190329005645.tgz","fileCount":80,"unpackedSize":4927673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnW91CRA9TVsSAnZWagAAFWMP/jBe2/z279e9WIBWbRCL\nOu263SeMn6sehMXeoaRySTMJqt7CCamfAVtl/1dy1fT/OiY6czs1Y3PKZP9+\nFqVqtIfK8ZZTHbhD1ni38PwszD1AXzM0t8raWku2MIpGYxHdoHOdpakx1bn6\noxDWTEx0opu0+thKar+C1oy2QwP+UPn2XTW1SzUmLbM5u2uDZIesXXh2n5+t\nAlK63ru7ggET4GvKXh0q+nilv2kwnf5oQyODalJaYI1eAilpt6lzf/JLo/9z\n2pdxcxhWx4IL+DpeBfd6NgU9yT0DgXSmTVQchms7QGaz8Sm17cCFRcbyJxxR\nGSKT5DhTTnuMs+gRf7/D1Q5QQb/nGCsOTes0ZU80gCWxtk3QGraGWKX+ZdLM\nmIRN93H6ZCZtzr5VaHdPrEmMCglmuOWZXE0EZkM8BMhgINk7RtLn5vLYHzP7\nNQ51sUku51+Qc5yCk9iEI02G6qu/kHT2NcFWW0JGIBcUhUbTGvJTxx96/jcS\nhV5+UGXk+1hY0g3AUKjqHPMgQVWHte/iRANyJ2xXVM4Ejb6PQ5dvv3/aJjhc\nP9S1+XpVIxJz2Ih9lFgHbtaBnki1SZYSI7Uyx2zyvy4/JaZN8mZmK/m/rgyY\nAHuttyXg8r8RKgg0hSLqdci2FrVUnrrsUB7TD9kYxtm0GftmCGdeRuQ3+aLw\nrD+u\r\n=KC0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnWuDL9tPasDNhXxx9HXvKYRGPR0JpK27CmnYeTOdA3wIgN/s1xr8dmCVylrh7RCCBIoAnzOSIC5iNWZWeVlq8lxw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.2-master.20190329005645_1553821557161_0.9738972559663128"},"_hasShrinkwrap":false},"2.0.2":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d0e96c1c56acf5040ce19ab35af4a0703980180c","_id":"@atomist/sdm-pack-fingerprints@2.0.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-l5xY9yPfpewA0lcyGbzhzFwdb6PALwnyzL/LkZmxQ48yOml4z8g210xijm2YKPIZ7+YZ4UP3k6ZIItyUNn3H7w==","shasum":"5e4d185d7f3bf9f791cc6f29e0f5d13e48ad8148","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.2.tgz","fileCount":80,"unpackedSize":4927651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnoYNCRA9TVsSAnZWagAA7jgQAJ8SKdJ+CJK73K3IzZYI\nqqSC8VJ/PyXg2WPl55WrT4Q83JjLnIslEnvQ5fgTs2seE+pGJYY5HhpxgDmM\n5jtZlhmIBv34WxQokixASe7Hucs5Jebv7DNFKn7ClWoHdsZV+28iFUBf68ck\nO2PczA5O1dYm93NUxYmsp2EQZ84ZcKzWjjfnFnyLKJTu7VzTcs8ED2lTvT+D\nnu8LYJHlBd7liYAeCT0WZEBlEU/XX4sDBaqDyw53zkhEwuigZL+Bqpib3Z0g\n94fNu6JW5S47lphDQ42wvZyHbHyk6Zf+fLTSam/3fIa4wVWbySY6cDEpjkaX\n3GdxhoNBPdd5CSLi9ekfPajpGWa8W8JpwoATcGbSXzytoaEEU7NGcMKtUEST\ns12rP7zgI4WbDqN/RdHwvsbN6Elt3whq9EEUH3XmJHSb6Q30sOS7zMUTHdZj\nZ6YscyFZ52Ofy2Ud47vWvQx2lKhmFbcRpp2ZoajljnLQ6dah2VDfiBXws/rH\n+kZRdjHkQGcraUh2GIQiFsRwRXLkJIA2Ga3rq1OmBRrXsXtbMKIhUzMMcmNP\nNXruv2MoFkUtaSWVQ203kSxf95gnuFZY1fo9/BjDIjSY2d0spxraDN7Go/J0\nLQLUsVjKo3rJsyWN9GkC7aSdkGiRupbvEgC+45IBYsGvIuCLk7UJqUvQuI4Z\nmzof\r\n=cgiL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0Zp9gpJbobFpGW0Z4n0b0yDiCIDaq0Ovrw+j1R3ckhAiBbMt7veJWm8arjTV36p2t5ORpF4Fmqr8fpIzM89iJ+Sw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.2_1553892876631_0.3350040155797782"},"_hasShrinkwrap":false},"2.0.3-master.20190410043635":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.3-master.20190410043635","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"117366ed0439896bbf458d8aa686e9b77f4296bb","_id":"@atomist/sdm-pack-fingerprints@2.0.3-master.20190410043635","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZNQkdCzhJAV+yehWQvAlnaG3KbJfx0GbFvKIyfa2YdJBBaJtt2DuK6e4R4dqlw1Ne38icWegypdmLQp1NjMgbg==","shasum":"8a07cccd060167af5950596b8d2f80b08b5e5d1c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.3-master.20190410043635.tgz","fileCount":80,"unpackedSize":4786787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrXTrCRA9TVsSAnZWagAAaawP/1NDh1Q2UTLZvG8zZCIo\n0oCHNml86qem1vAhs8ccnm9By+wvPpv6lotyhBrwG6pp2OayielGEvbgDSjx\nreQb6hZ2cq6XjRxpSmXHbCubCtLcnlW2YC0z+MAgR0Fnc8LBsyDh8FYe6DA7\nyJvE9A/QQLjX9lKyt4RMbklNaKACd8aCYswc3k8KNgpKNiGBF3s3Z1pLvbq7\nT1mwmDGf5BiK8kBA9t+ImGz69OifHDL7C8FiyzhjOHqrMilrg8LyJbDKkknI\nf0yfJD6/XtssDMDuJ2oKZJLsKs8BDltyXc4d1o6TLwCMyEgqfDpyo8XeaxV7\nqIYrzPBktM4YNcE7kLyHYvmDgebUUConWK8iO5+4P5kSLy4wlDUx2mWabH79\noNRuM89OCHGTc9FBP0o5Q67sr/2LoL/1iWZwfQqtwSC9CqUODMpkX1qRZQar\nW7S23f12qCk1WVR5SXBLEeuElCFpAzUVGvz2m5FOVXaIHxHJuqVmNvHydL8H\nUanD+cV0ar8euzlWAPsDQ4YVcNEBiSm08xKM+eMidePfcyCaVYXmfN+0mpTt\nvHqJuilZ5UdqqcPL2Uaa77JWh4VupNRPKTuaeHDGOUpQPKe+qBN2sy1OlBBG\n6ngRHh0Cl94xKfkIZEFPqSlKokOwSvRcMHi9pgb/YeVpjS87Lz8UBdMcjy5D\np+nR\r\n=sCoU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6cSmTb9HHJKuwf2aCiDVPS/sC9GbTfdckouFepDgfhwIhAPK1WJXltQyG9PM8v/h9bW1Y920BMpyBgjq4dSdOurSu"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.3-master.20190410043635_1554871530706_0.33311651576904633"},"_hasShrinkwrap":false},"2.0.3-master.20190410054626":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.3-master.20190410054626","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"379286547231e0e98eb9d16a9030e7e55138a534","_id":"@atomist/sdm-pack-fingerprints@2.0.3-master.20190410054626","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-X9z0SOD/hNHf9JZTjjNrMG6ixH7utuGwQucZSFYkBIpu0UkYQ8HZ+M1wXLTNRfZr8x3qAmg823pal7Z/rGZYWg==","shasum":"f06a8f9d370d81243581ec4ec2d48868b7511735","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.3-master.20190410054626.tgz","fileCount":80,"unpackedSize":4938287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrYUXCRA9TVsSAnZWagAA6gYP/1hcCvyym3YrsnvLUoJj\ng6857LVYpdvL07DMD/TWkqI1fzIqAYsRKPrIBmQNRXkPkiWjn7T15pq/ye0X\n3mLmYIwA4UUEKeNLnJgP8K74QktNNvur8v0NiHcude4lsIu+v4Hdr4xY8TpV\nfqabll8IWX8PivWklo0nVGk3i1bNjxz1YzSHdI21fK+mi5FrLEuZhxQqhiHx\nqEUzI/FAKe6KKcpSrsLfcMk1XrG3KXTTOt3XfzZ9SkLBLfByCQeo9IXFuk3J\nYzQ0tcJlrmri57ZmbtVEpm6NoaW/9RCnbq0PZGcepGSCCVRRbO4DyEvna8sl\nKLDNVddJxcTm5w13Rj2f9ndL2kwsMFhoh+/A5TT4v+qkJH2xhpBfRszMvaB3\nS/jdu49a6FZKZxU74bwUBlmR4ZvPOuHFcT2zvjRoec+6iAiDJyhjoVs0kITo\n99f+oXXCj+3tIi32JVCnijnOirgRNCLzq9O54my5XSwypIEgklb0hdZVHQig\n+P5NldOmF3Ppb5xYEb4nCwzaRbJCaNDAMP0gzKpcwSk7mPDKlhTb8t5ZuU7q\nm7QMNstrrwnX/q9Qkxw8Qw38kH72RxHanQWg1zoKqqtc4vpSVFQoNYV3Fv16\nIGtCbLcJWcBLXrTpnsgVfcoHaEVGsntu340xQ6Fj4ZCO4DPgWr8cK79TED1Y\nwh51\r\n=f1Yj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIKkK+lBjL+FwzadIp3MKG+Wf/00Pq2lfKUDh/ii+i2gIhAIcaPCEHKMhEVHvY0EzoBmnqjeMzFw9SlO8vNOV1Vh0o"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.3-master.20190410054626_1554875670997_0.489271519569187"},"_hasShrinkwrap":false},"2.0.3":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.3","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d7b863759311317c580c99ab960209b8684cf960","_id":"@atomist/sdm-pack-fingerprints@2.0.3","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-++g6ypOwMdga8Q3PFQKTU3yShx1wDi2MwEPrP2MjMaBs7tPlbGKT7lYIZONyCaTy1LwOP7+mKtxQAo4XhT58Ag==","shasum":"cf5c0f99c20fac797a34176601cdd55ce3c93760","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.3.tgz","fileCount":80,"unpackedSize":4938265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrYVVCRA9TVsSAnZWagAAG6IP/jrEBb5wxhb4NLk2ix8R\nTtxyGcTiOpGA1SHc/0LhqJNuSQBgZoPwhjVa5jlJIRiWm4OPAcpGMmY+7P8s\nm72/GrRKZT0tvMBBijwN98iLj0CVyTi4I+avcV28BppgiYliT9Ayl8nnVXhG\n2LhZeIwLNBFIEdhlB+JPRnW65wEp3NXGrhgXRFJ/N0FYRcyDzipS4dYHmZzx\nQDxAvhW/YP1wzytV04kIN3eTAHvqQofx+mfejugKd18VNAftsZW/jSsD2aeE\nRNuETEh42lkVNyoF9ewM48R9aMavtptf+dTTMD2D/SpIdu7rEGLrZwr3QDSG\nkVpSIuipUJW5WTsAvE53Dm5xXskVpzhc7JSAYQGaTs6yJWtIh+Z4FAME/Wqd\nz8Xa8OIMAeRfj0jezMmy/mtKwXp/RDVVuU7yPfTn05ej6xTOUDlToDHORrvD\nGEcGE7zZiE56IGqHpuIF+rqQYjwEpESx3gb9TqGsu9UzIX5BORKa2Ij/0R2K\nj6BDU9TZd70XhhpW/dxp33J4Uo6MhpoWd/tHFFVXxacP2PHJN7MU8EjJlmCl\njHP8X8ExrxffS/LQmpzQKs79WFON8GwJUoxOAQebKqX0GKxMEM1lGV2dkWB0\nMSQV84QjkcYHqZfSa9ijQc1RpeluVMTs65R6EBPF5cBtkJ9rUq5vrLTOFGvd\nO9jW\r\n=+KMB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoWcUzBvMBVQtv3/ITZo6oClAiznQcCX0Gz/WII+4nTwIgC68GE4ocQ05ic/+wpeeStrMkGVuUaISMtSZws9YG6aM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.3_1554875732609_0.4892599446922563"},"_hasShrinkwrap":false},"2.0.4-refactor-command.20190416223314":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4-refactor-command.20190416223314","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e1ddf2f885b7fb275e3b70bca8e31d1782627046","_id":"@atomist/sdm-pack-fingerprints@2.0.4-refactor-command.20190416223314","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-KQVzLuCxex5rChoIhPW9TQpqKQcBG3yc5Gbn7IROnlJQuiTxAe0tKGw5QfnpMEXkRORvGA14BSGoxukyxwgEsg==","shasum":"03461c3555567a9459a1f5ed75d017b985ea9e3f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4-refactor-command.20190416223314.tgz","fileCount":80,"unpackedSize":4937831,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctlo/CRA9TVsSAnZWagAAN6UP/iXjNv1EOh4Ram7tXQbQ\nl53yPEnyPQ9tCPd9dLmz9zWyhUiPpyh4keZwTcuDSyecm1BV0FYv9v2ytha3\non5XLoYnA9Lj+WP2+N9PKFZbVLfVdxS4DusJnOTt9Ah916aq83zlL7XecSJM\nduNqAZLgVEDF7nnb2Z7OHS7B6w0YmLoaWaivYVS4CWxxhvRF7DG/FcJ99kXl\n/pfgCFumB0pdyAYVusEIxkKlt21WfADSzmkhLN7jLeu2cCe5RwPgekRHjK7k\ndyOEn3uaSIfMOHxxPGg5tBJ5dMyEGY41YR1lwrAeE92vdbTCBNbBCZpBgAdF\n+hpo+XtTjS3Og56Nd7o1m1zPTuLC83kkRgX47WQKGHUBMLcgZ00FHi316wwW\nhg+3Mifubivrm/9oXYUXoZVDAl+4Al7+XZL8CLKVwglINIjtMAtqLY8w9jlK\nO4/9hAP6ppS49TyXoGuH80Atdsp0QS1oFCGcwLyenfuwiXq7zQdlRhmdItBh\n2nJlSB5P3+gkO5aMoWi0PKIcNmpzFwQoigDzNSA4ljl/66xwIK1OpU2NoC6K\nh0jRj/yWDMW2p6Tm/c1YsVfJCsw8EqxJFTGT6d55ZALmmh4YBDGHrGDjGhk8\n7jQ0sNBihgIH0+jiaacNhk/XWau+72cBd712x3tEsIx0yb0MOXD2OpHfSmhT\nSu6N\r\n=QZaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGM4raSLHsx2xnfkln5B1cdSqyPr2Ut+s4Daf5vM3/mwAiEAyRgB359GpwSMHBAnJix9FNVCC0f4ZvDA1uSox5t6bTE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4-refactor-command.20190416223314_1555454526287_0.34903218685063786"},"_hasShrinkwrap":false},"2.0.4-refactor-command.20190417011604":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4-refactor-command.20190417011604","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"085f1188487b1b6317ca8002bb77baa33309d9ff","_id":"@atomist/sdm-pack-fingerprints@2.0.4-refactor-command.20190417011604","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-CMYOkYZzCeg0muSV7veotCUSMAxOoUgxs4+ygWtSEIU3hDVJby0cDLSfa5J/6JSxr6XR+nNwh22XyqQy1zcH1w==","shasum":"3622b9e3cef74e63c3911e2805ab8cbd267c0c0a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4-refactor-command.20190417011604.tgz","fileCount":80,"unpackedSize":4936955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctoBqCRA9TVsSAnZWagAA/mYP/24sfamDHkbMh1E7QLL9\nWr3JHiMVJfHuks1rTNg1TVu+R5AS3kyOG4bp10crGMxa6uvx35JFX6ojU/iT\nvzX4cWt2cVMtucJhYL7W5QOhMLbSB8tDbF+DMijky1bElqhDXm4audv9Uglr\nLaJKVIXC6AM574VE75xT7RDhUyDGhzTyjWcJPocBt6DS7KW2hFBEbziv718B\nCId+KjdXk8UoJOq3V4ePlVmr7DXbBEm4SPSsFM8EbPvSVTVwYecX7lg+sQZm\nQaq8t097+UKuPIrYz8iOJwB/8xGfZan++2nTAkY6pYtXSRtuh1wmT+2RdJsQ\ntv2EgAJ2joZW/gvIOf09ZWhZzTuAFc6yi/f2UOM+EilUxqU8FAqPsBHuE1QT\n9KIBVmcjjNqKYHqFVdMgFkFsMRsWegub4omOrEIG1qWaOwvjXGOmy0mFrWsg\n+0xbuhvTBaBlCj0fchzgM5xFe5Ju6rqba81IbPZJopYrkBIm3Q7AGzhjgDgg\nbhTpOBUoMBNDZmqUzrICCPTyGXN+iDDGGt/Z07v6k+SXWQl5sfntwGDckwLe\ngNs40h6gpR/hSsEFw6aJO6VRhW9WS7QjTtS6j1sNJEKqbt5G7E8WodcuEB3d\nySAbdASY+1NjYZmQrKQ0OQjwYnOafCE7COJaQhhCgIWab8wIX5U9bguCmaNo\nJqwZ\r\n=fOl6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID0/dwOl1GeFd+I55EcSKaanBZ7cls5SlAkuAUX5enLkAiEApDIWBQquQj6fPVPaOmSZLgcGVe7VUK3kFDs1UsshmBs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4-refactor-command.20190417011604_1555464297735_0.8777307112190706"},"_hasShrinkwrap":false},"2.0.4-refactor-command.20190417060051":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4-refactor-command.20190417060051","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"687b70df218c8bb02948ad8dc5d2866eea2d592c","_id":"@atomist/sdm-pack-fingerprints@2.0.4-refactor-command.20190417060051","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-jqV/gbRD8HDeK7RP4w72v7Qxiubj5pPZBzKIJbURvBVtVJxRgkBmZX0KEMZOl0oIwwjGOCw/FUKseVX08Fuhvw==","shasum":"f6285035ab7a03834afcbd2ace8ae9e1243c1001","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4-refactor-command.20190417060051.tgz","fileCount":80,"unpackedSize":4936959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctsMHCRA9TVsSAnZWagAAtwkP/iZiXJhAAZQUvASB8Xik\nC7LYc8+7lyyvShJ8MHGWem4XHi0QgcVaUuBHVrdVOvE5jDId3vAOufrSTBDg\nmPL0afZXYLGCnyLIf7iYkI0qB7Q8blIt8qkX3t08f63vViIxmmupMNdxgMnn\nDRM7MfJ1o5bzjFNiTWdkUf1amq/HcjtzoBUMhyh7i4mmDRqHsWX860kgdEuk\nykaicCxIxW3JgeiVyMTAfrBLpN7MLELHW0aD1hqM6XsaV13qbeVNvzKRJpPA\nG4wiHlZ1R9xiEXDm+VUivNBg7mGDhssjNU1a6Guc9UQuegWs3JOoYPYeUN5D\nE3XBbnqv/4yqjazTkrpUJluXFAkug/f7f3EOHOOixKcmCRRjA1xNhksxp4GR\n51IxNBUQtxcs/v4Ok2VVFADmmjnovbDbYseclq4+NTgbRWRIhcJ2n1U7NbCH\nWlBN8rdcqtRz/rI3jSUqtDlEbm1+xqI6xEoWnIs6hM41VnaF1lpuGtyT9npD\nf2hSlWOwPML1NuCWODNP5MlYF3cMvEu2FwGSKAX0kPVLH7TOcr2Vq0/3bQGA\nR0G8dCum6tPiHnMLQ9ncfj0vzA8zwnE2STkxZ6IAtxOBUjow8/02vw0F0Bio\ni3AVyw2bqapBgZSQf/D26v7s502m3+O4TK95WfON0Z97EcMt6/VoTHRM11Dg\nT9Xs\r\n=UZWF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWhMELda3IikuYMYP9X2zeeGygc48r7g9sS6goUGJ93AiEAlHRAWXmDTZNqAvyQNcyIvJdrQ56MngTcODzDlBWGQgY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4-refactor-command.20190417060051_1555481350680_0.7026716617553512"},"_hasShrinkwrap":false},"2.0.4-master.20190417063352":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4-master.20190417063352","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"efe61d0311dda12b72d37c0ca50bb0019ef83d58","_id":"@atomist/sdm-pack-fingerprints@2.0.4-master.20190417063352","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-0/YK/1uSWDg6JLta/u5n003NeRyWRYZ8b7Ok2EQGOL2la3AeP5PxOQHdN2/tTFjmnaF2lY03ilfqpqgdL3kzhQ==","shasum":"cac5c967612437a7b895074152555951eab9b151","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4-master.20190417063352.tgz","fileCount":80,"unpackedSize":4935707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctsqoCRA9TVsSAnZWagAAdLcP/2kfQ1gElhgHwMdI/AaR\nEf8JFChv2U1pxuuRKVci8s3lD0x9zI1Ywy/fXv0z33IY4pRqn/YAsNA8wTpx\n5j6OmBM992htEu7b5zNJihWJIXVo7PjNW+KT9tkQOeAEeU0JhZPo2zfdQCFL\nEXMyDwfAonmI3TmcZcXK6bqOeb5sUUU4BIJBRLQ+vXB+bpfMkr8Y238jbPHa\nADHsKKipgFW6ublN31Apg5BVaTOdZsSfN3wsEkK93PdXEfj/aCZeFvvRpGit\nNT7fKyQ8YSlhCRktegSP28SMVnAoVUlCtxjYvNw8brOoGv7YXvudSxJChhcE\nLY8y2+A+CLUga0WJbXPpYe1hOwzM4fdFHmrXmtOyJ2IcEZGCFEI0bPZoMXMB\ntKWv/YMudeM6GvWQklWyxjePBL8JUmQ87h09qOQ738VfrLhxESAKwVB9cpoa\nhQgYYilN6TB5q4qzGiKLGciAqO6EHahq4dZyCspgzutdQwlS2DHmZEbHZi8B\nyNpaj25H9WcpFu13WnjYp016lp90Z76fxgmo+xdhln+JaY3hMlHcOJV/l0Qy\nZ0cVjloIgRjYptAoXxlwk6NzWabQ6ZJJLrHhkkx3GwTNk5Hd5lsPaIZDR0SH\nLMHX4EjP2dpOImn5g2Z4rFjyp1JMAbfHntz34SbxKJEtu/O0IbgMo+NESPta\nK4Lq\r\n=WdI1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWwVXrjWsDJWoMdRl/rq0k1YpimbmjpJnwaFpPxMWIMAiA+95thWz1CYL+Y4Wqp/pTiajo/s7qaqP2Tk9cQM8o3iA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4-master.20190417063352_1555483303716_0.300501827136624"},"_hasShrinkwrap":false},"2.0.4-master.20190418004041":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4-master.20190418004041","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"492c31ce1682e7fba46abe9c8113ebf25bbf1a03","_id":"@atomist/sdm-pack-fingerprints@2.0.4-master.20190418004041","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-cJadZOjTXMkJ8rJ50RIHT1SJWIzo6yDnEFVsfqR1IK4D+yi8pOqofHUX6Sh7/Nhh+MwWMLwlBeYQm9/qxb0gAw==","shasum":"6af5ae60e14e9924ce49e77f931f388ae4c86144","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4-master.20190418004041.tgz","fileCount":80,"unpackedSize":4936157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct8mKCRA9TVsSAnZWagAAJ9EP/iMJjRaDBole/l95dKlP\nvDQxLVHiVcjG+c5Fw+2nJx05bibSVAAO2Z2GHjuLGd+LLYhthaPsgLGsFU2f\neQB1iRxHta8qj77GtxPuUo4ZF4Dp3GBd3uBEFuimpAsPkXfU+iOaNtW5vZqB\n7qVFB2366nlxR1OC4NhEOa5I+uSxJqxCBaYvxrbWrqqVspD6P9/KYINgUt7Q\nYdo5QXVLcqCsuIblc3mh7NFGYhyp15wIRRrPQxvP9jpYPUWJQ44N3iago+QX\nqliVB7GuZNYVlPlZoIzl+vb5wuKgRYxl3aXUmzhzY7EQLEkvfiKItcz22BZ0\nlp2EVN50LxqqoTdhjkG0EnlU46kYm8qPt2ivuj/C3uCMNXqmoBUZtBj/hENb\nRjGfDq4UI7aOx27SUVUZS3i2KTyIXraaKWKE9jITLKPmWyiDMfokE2YrUl42\nLUy/Ofr6Z0XDf0NySLw8kE3Ls54+p8fRp1GvQ4ddHQUo4KO+B9lnuCeSN6Ue\ngPqbdbP275mtTb/bA3vkNWi+RMGeruV34Q91KZzHTFkCthJl8X+rlXp20okg\nUrdGePbVZgSc4r0sOuH8Q602dMzo1x6114nXdKIxKWPnP6r2jAGcFwLjdB48\nATvcqQ0mRUqxXQV84uTslFCyQqf/8F4HJDd5EOtkEUxEakCIFH10OxsKlsi2\nFipI\r\n=Xsbr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGzftfrwxqlV/ZBYlEGheckxHoCB6bf2ZrNnfpbypqdAAiBykWm6cWghm3tcEcHHlDL7csmwIBUlOiyS6uCchk156A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4-master.20190418004041_1555548554359_0.3075503446925967"},"_hasShrinkwrap":false},"2.0.4":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"dadeb9c0d5e12e6ce9565bf8cd3def63f37d42e9","_id":"@atomist/sdm-pack-fingerprints@2.0.4","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-/Bz90P4INRGdC/iyPIHHYFcGwbOk4ezHUsBcHsW1UW+zAXwM/x7hz1i8TvEP31qkUBYOus5h0WmiTMDFMy/eKg==","shasum":"b596ed33ea59e206bac517a839474ac6d093785d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.4.tgz","fileCount":80,"unpackedSize":4936135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct9UJCRA9TVsSAnZWagAA2GwP/1r9PqxuZ9gz7phwYyDf\nKESgwdpOsZC6m6L7mIZpuyK3o2zmHZldMG6yDen2pUu5tWna4PX4Sme5eACc\nt4TGn8x550JrpQqm/C9waRDLesV64AKdpmjO/eewKQ0c6H85AHGz/py2Pl49\nyvTTu8TSwMqaHY58LmsUg/aKa0bdUPuvCb/d170nzEp+bIlPvc1FPlgC4LnC\n+Nolp1kb7xP0ZXxpR413v2TyCQbnyq0q1n0zltXt9dIYXWDqV/sGDIR6WJxx\nxIaZ4nQUUAEdbgdbN/alN1jdyaU46y3v5HM4XLQ0uYlEPhy3JJgbu8oHYmNf\n5p+gMrD9jyDV+6yDo+87mGQjCIzC+mRX5qprRkkicnqbE3F4xyphMeXWzHp/\nq3L8I69uGMlTN5907MVoU6W56oz4BEeeG52aRxZ8NKoaQREB5Y2pEg77Gh8X\ny0pnJag1+qxzyk51gV3WRVOXy2ZLgBgzRY58sv4LlWYUIq0jqvCvA0K5Drxz\nGY3oopZlnb4XDSk67fzWhLDoVxNLdIYUCOg0BowCZEVHNabn7npirApIktFD\nEhxBG8ym+wUmNOXpoliF4IABJbtFsy0hzMXQEk0bZPaNMuUH+DPP2QnlKMsm\ny4IlBuei7gh1L1JoVXhfgZDGCsGuMSfjmrBnQQbSJAyZ2VbtJ+HvJmTrONzU\nO2/+\r\n=GFEd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7ndNwXQ8C9JiKU4SvNdPv1EKjyWNyYQB4iNImwonLdwIgafpBMV5tDmb1dwOpZb5m32TAAuEObHCtApxJrIHueuo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.4_1555551496455_0.2229560591081725"},"_hasShrinkwrap":false},"2.0.5-master.20190424030718":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-master.20190424030718","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"66d7df21a759929ca0bab29b294a8d70b9ba84b5","_id":"@atomist/sdm-pack-fingerprints@2.0.5-master.20190424030718","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-sJSlJCQ9qTvBeRgyVWeCNL3/45vqxcyhCL6hGVLJPmZBzFT+8LvCEkdjT56hQ7C8D5PeRRp9YLAfPH9/PZ8tZg==","shasum":"64d1a7e57c05e326a07aa5629839b0a56bab455b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-master.20190424030718.tgz","fileCount":81,"unpackedSize":5001259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcv9U3CRA9TVsSAnZWagAA/tkP/j8HiPVQkMtXNnvBOLYX\ncp4sYOUjqZJuWkdDW03l0WBXwXmBS3h9c8/cpWy7BxhrodHas3QdbKBROZzO\n21YcVcNyI/xfhqgNkV9l9igWxqfpUBPsacINHlnrDR1QCkvyI0EYSskb8qFH\nZn8upN5XE9R3XTJZr+DPQQ4hKTCiTxzlnSR66SzPjX0LlEyWYzS74vgj77nI\ntRREO8AREwBTN5J4rgOKc0fLCaxPvd5MQraAVbR+NclYRN8TiEp1yKN0v+Jp\nQhFi9VJOrpP6BEpTm6Tc8+V33zCTZYj32tkxFC7zHa/A6zDChuveINOQPTrY\niE/SG/f2GrWMlB9n3fsl3s6Kbn1qnnXA4L5+itQnRcWSFHOe85R/Wwbpkewp\noLksd9Q4rdG+UZ70J9vQsXcO2JNB5mhbgMvIz+e7LY8FqTKNGt8Zx4u8gi0y\nln/ztcu+ncBMp06Is6Yas+txi1HGBkwERTkDZh/lIpHQu38lO6cv/JiRANQw\nHs0njawlwEZkPRIwJDoQiB6F47Tpjhf9auMSPMv6g4S/wTV8JaMn96//MuCf\nHPXtVDmTkNOD9c8m6x4E+qyBS+7dzffwdS+CSR2KXahTi6zrIKzxtGx6Ec6U\neqWdYxBjRaEY2HHbzdSTGDLWLaMEdFNzTMWIm1m6+ajWzEQasOWoc1awkzQi\nVTdH\r\n=hbBR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5oVZ+4ZpFiyD/HPdsoCeKT0P+ZRHowMpvVU1+JnYMbAiA8psRpnrYWGLjJq7C6A5SE6z1EKp3zE3tQNb/S4iw0ug=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-master.20190424030718_1556075830527_0.1815846675974171"},"_hasShrinkwrap":false},"2.0.5-master.20190426013342":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-master.20190426013342","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ef5ec1e55921bcdef7c3fb083b51630eccc9b2b0","_id":"@atomist/sdm-pack-fingerprints@2.0.5-master.20190426013342","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-t57xlfLILxHY2iHRBOKadcvw5abNKptiZy/ZUedwfD+e+r56AadY/cfey2mw1Xq8Iv1K6mqJz/GA+SZ0/D/CMA==","shasum":"c5f3409262f18a404a9617f2642622dca09f9d60","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-master.20190426013342.tgz","fileCount":82,"unpackedSize":4998250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwmJOCRA9TVsSAnZWagAAbSIQAJuP9kTAeeJYQNvMXhs4\nVkCIgTxlInHT2AA4hnxkRA5EG9JXjpeMf6K+EF9qZg+S/nPI5NR62NHwU+UH\nZW40nDjUBcATwyr2exfejjSn6RfBZ7LjdQCNuMLCInnKH5NPCu/5RZgYQ7HN\nJTYN3w347x3sExfE1H3shUGUIO+BeDryDofReBuIhRDktsPwhnwsRJjmWUdQ\nC5dh+mU34i3BLEtSgS/pj15JtIcJik0SuCYPGZc7lMuXY/oPDvAkFSzEbhAf\ncPb1o/kIdZM3z3/vi+IANq5OrHTtyYMEOXxZqtTVpQ7cgGbvRD34HOBAHYOp\nIj3zTjb5GMZYfjQo5DtKyuSYprc98pap3fgWi3JcfPfEkl+rlS1PJDJkqMLB\nBeV+7BFq1rBS2kOdfFb3P3nu2MeLnwyng9zdmMZHWBHYZuQszGyYeIMcn6iQ\n951e+cGQy4rBREGq7vXilefe+33Ro5i+Pe0dYOMrPx7o4g1fk3341h7V8zkI\nSli2anbKKdnQm+nGObzmzdRKqb00lMPillGKpZefkGaM3x33Vj1mE0TlMyRf\nRKVTevb8v/v1/q+1j1gF86bh9vQwFLDRUYiYCvbZWDxIovoDhY+HfA58ZtDs\niO3bbMJWHEqBz6MFa/CFXUp/eBWqII5XWYgecHfdJjJxKw8RR+5kTpel/YRb\nPZkt\r\n=etR0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHh95ctDBbJXOh+7rLrGTkNd5z+KH5Mr+1gKIf8qeTiYAiEA3crUKeZsYMFYJnh9A/2MuCymwJhKOcNrSq5c5RJP5tM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-master.20190426013342_1556243021403_0.4474939356299321"},"_hasShrinkwrap":false},"2.0.5-master.20190427072209":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-master.20190427072209","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e5cfc050ee3e5f49730f0ab512553fd4e0909c98","_id":"@atomist/sdm-pack-fingerprints@2.0.5-master.20190427072209","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-qWwk+lA41Ve9Nft+NjMxQEXkL72eCWQyDmqxR9x/MBGqKBzy2Mptg/JgELv9DOJOZWtt7qhyBykg2S9D83QJ5A==","shasum":"2c11593eb2ca6c9984365e40ca61aaa0d137a9f2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-master.20190427072209.tgz","fileCount":82,"unpackedSize":4998683,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxAUlCRA9TVsSAnZWagAAyJwP/1dxvtzCekcavkYVj13j\nOImUK+2IyeA0/Hr6DBGROIHIjgJwLt8hZ426p9PbRK3mgcfRWwWiBKlXKfMq\nyYLV/sP2275mwVzY4MOTauY1pnig110MJTmgz5jJFXu1IIHt8TswLf0FZJs1\nLNTORPe//O6bw3TLJc944Lxxtd5YkUauS/ID6Ip9LOfwMJU0kXrPS6Vnpfc9\naUCAmMm7c0OjIMGVQWB2kEZ+Lq5rB8GE6N6pX7pvfHujSS0f4/nhOezNbhvh\nDAbqwTL3SHOZ3NCeQN8DyfUkQiDjagq2njo1c8QR6zn8KOoSQopn3s9uGnQv\nLqOnZqlSGmNUoXYDJHPjy4ozucX6/PgvoNDxhkcvqWXUVcPZq3Mtw45vt41O\nIYIDbgemplw+7bvav+qlNMonZd5X89pwWorC4aubEieUeeMB9y5IRxCC72HL\niy1ZNJ5HpJq6r9nG1ib9k/mqQwlcZvwFbnxdbuqy1IpYMhC6ltADt1TF4uU7\nKL/9IWBH+2q2tpxPaXuc56/8uvdjInoSojgZwU/tjRMjQSi2rlXHThoTCQLb\n76qobnYnH/1cG6eFVzZdofwUuNdFULbJNBdDD9Bib8MzChzqkXwYDgzOS5qF\n/BzYAKLckly6erry1KJWdVIEik1qDP57Gy9PfXGfdNCq6nwy0mYtahMA/XLW\nFvcz\r\n=Ed4R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCo3Z1nORncvmyjPR6pNFrJAya90gWHRQBM7sCqvGKBygIhAKrR/CDKUfoyhJVSQrFru5gkJe4glb+wdr83wnSWQGfQ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-master.20190427072209_1556350244639_0.15758737801464373"},"_hasShrinkwrap":false},"2.0.5-master.20190428074803":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-master.20190428074803","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"726b3c633647242e66625bf6cd705b7f7966f05a","_id":"@atomist/sdm-pack-fingerprints@2.0.5-master.20190428074803","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-0m0g+b3V7yoQIu5gzzC+sdRs94B9SnBoTGNwTRMM3hBPW3PGMpVLMS5hcGWi61EuuJuOMqekbLlWMPvO5TrjQA==","shasum":"8eaa0e4ee6db32e75e8c610d3b183b07da41dd76","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-master.20190428074803.tgz","fileCount":82,"unpackedSize":4850967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxV/DCRA9TVsSAnZWagAAJMwP/iutYOVjeTvX+HJ95opJ\nUldL6atyrawzkST+0BG9oSrJ+PDBhh8qj51h0Z/RxTju50G0CMuhvYCguOtr\nwCNdNgaWCw1B7nkZwlsL74neeIxGU3jF/8AUmFKzzQE7WQr/slBgTS48sMZc\n+RWM+l6VK/sSBo1xKOrZjmkiMRh3c78dOZt5g+ogvUTJ7199nUH0CxMODm85\nSvTLkstuHyuIXUfx9JBVYRPLW1DDXJ0CQRmbNmNw/VEljE0o5fBdrIUrT6tv\nzG0JqQq6n45MzbIiqgRjnyDFHPEzvErR61wOVmf83P62YOYGcQyPnqbEwih4\nTz/ZipDKsKhPMkTNF3dy7gHjCp+L244OFZ1BFyzbuD8WdNjt00LScSeYpSIk\n413plSrDez2HduRTQKHprAlSmMiTHgTLTeNOwFf2GQNMzEnM/7BAyWXb4Rgv\nF8G+1ZsmlD5P4dsiEDijgDHtHOtcpEta9gnmii93yw8mQeaeYZwUimz2cYZj\ntUqjawDkCI0vTgMjqiOVcnrUlRuO1cecW4dfD/L8/Dktef9yLN4aBJt9v/Zo\nY3/soZF2y6yR6xkDF3pTqfk1+eIsLnJDrYFrpbTS+Opf8+hvqMJu6iWEJPKF\n36QnKtGXG76ZZAB4yyRVx/ZtJaZIi7KYwdpEjRQWA8UlcTrmm7VTp4p6uw8V\nSgh5\r\n=76H/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBWozLpM2czG7Y/akD3ntr9eYuPbyAInbexsf4+PEAImAiEAv6OmSWtfeAizW32VmNIUCG8gOd//72IyksQlpUE9K/Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-master.20190428074803_1556438978705_0.2042865169482151"},"_hasShrinkwrap":false},"2.0.5-master.20190430191342":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-master.20190430191342","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"045fb19b83a3930a70ca7d5163fd0784d388a394","_id":"@atomist/sdm-pack-fingerprints@2.0.5-master.20190430191342","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5vLK3GNJK0vXFhD42YqJMp7A8BjS34U03UW/Zv3E2LXVpvNyZ2jgty6WHj9qC72H0pC1NlHn1UZ1BfiIIVtclg==","shasum":"108f01a1bbafdd2252d4a548087befce39799835","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-master.20190430191342.tgz","fileCount":82,"unpackedSize":4850730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyKOGCRA9TVsSAnZWagAAj9IP/24uYH2BkgUOw97jvwqO\nGym5xZUPnheYMSMgLGcVOzPtAuyKujYQU3f+Pg4F/ytCYWQP8V2JcR+VoYJr\nBhaFOOFFZh31G0BX4o8+qpPsl+2oLKx4CBXsb19NVi0yhOMl2JI0lytCVAFU\nwxfy7xflJAt+ieSASpXt4OJjVKtNCksTDMIDGh0Xo4AAqokmR06OLHdyUlOd\nwtbB6ZiAumEWuGwLiESY9k9VNz6DArSWeKACrj87B5UuuzIAIqueymoW3gL6\nI6dCr/MfjQhDH0UZtqJD0r1Ht3+MwbGKWcZV7J1Sd7BCP8Z7cQnS2WtLllzH\n9gJaEaYgKWeNHCAhBzO238v5KU2+Q5Rc4Teo3n4IOB3S7gvhm5y2DB2xzBGt\nvFRY4Dz5tWXBOBKdzfLkRZ6RjHXtiZMdVCdl21xe0Q+RFi9qS7Uq4rxNMQpg\nDwgaGUKN1Ai8fxemzFSmDYCPof5AMT3pk0mZ6woxR9vgArEdJGWh9L+E1zIO\nMgCksWZq/ln56rBki0YcEeBkRBE8CEt8TpzagkUQh+zcczBV3KdT97km5gWM\nGyOJsevdr634Z64w7pVpod2dM7xxJ9Ze4eKlOVuqTF42LbIQhGc6C8vdqSuw\n0ZwK12VTn0Hj0QFU9zEW1+76C/nQT+uwwdN3LR6ym+gHS4wpu1Ro9d5rSW41\nkXCJ\r\n=rosk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmGmRO9owZ9sNp29StJO/cwm5ZRUAVlJdkk5nuLKmMMQIgShqrh8zzAHFIAlsM76f3a8mqcftUxnzcZFsW1nQTgdk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-master.20190430191342_1556652934036_0.9729994002589084"},"_hasShrinkwrap":false},"2.0.5":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"2fbaa9278d0b0c42d40e77d48e0edd980736c3e8","_id":"@atomist/sdm-pack-fingerprints@2.0.5","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-NBqZeXNVfAlnDUjshiTjAVTnNhB3kYQarri26jT41kL3QS9q+Ewe1Zm5ggRPwfgNQBwt+1fi+XL45PaeL7Umxg==","shasum":"17ceec6af7ccb793abe95e7d3840178bb5d81ebf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5.tgz","fileCount":82,"unpackedSize":4850708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyKRgCRA9TVsSAnZWagAAAJ8P/0NEdqY5jInjnPOeT/c1\n0r/ptiJ4zvdOSFqwjlNk3fK3ICcwx4XlajpXZ+QHqWWW5ee8m2Ei7eLPNt4T\noccG0Q9EQdOCL6P8xZdFhIHRT2Y2g83JVEfK5tLWONLkvG+QGrY7FLtGuJsi\nsS6Hmouk6umheqDV7GtCqwCNdStYJdmzgLMOgrxOgXwIxy6IStQa9y8zoNzm\nzfleBSpHzo1Nzxq1SCJHoF5E2TIXi9JNAW5T63BOq9Wi+lP9nsxAnioZS0HL\nmokYYxur3VneAlFmKdMFXTGS0yQouM4tmQZ0yPyN2o2bBV8ZHpeEqt4RRmrm\n7nqIjLSNUOt7tneL5w/DUCj2KZlGwFp4TjabZPGHAjmJhzHgSJ5uKsS15R8l\nty+QD3OxpxYdqN/m+ykvAnp4wSOXvX+khCVnUNPETEqaKYsw5gvyKABUkdOF\nOGWr3nsozIfKEN+r3JclElQ1br7X699sadlr6yrJ8GZHfm6rO64LqF/AdGzk\nV+KpQfWFxy8CVSvI21qHFU65Rk4tvWglJXaTvhbF8tyQGPN53XqrFruXYUnJ\nOWXnuEK4/HWRgqj2/5EpmvNAITSAuQGh2sGa6hO+SyAvc131Z7AjOPA2h4i7\nkSnsV1XDBanOlrt/A5ZNet2kCNOJZsqKk/nN0V/xqKxtpG1GRrJkBkpo620+\nepjA\r\n=ySVg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHX592/tz8+d9VcYs/kSWptLpBZsz+eEmwOtc0/Wvs3iAiEAldzw6rS+gdlNgonaFT5ySo81QCUf6S5wsgS222XgM1Y="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5_1556653152032_0.8117287963973236"},"_hasShrinkwrap":false},"2.0.5-customingestion.20190501003030":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-customingestion.20190501003030","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"766a2a9e1984e2b36e909d466481a2c1bc0888d3","_id":"@atomist/sdm-pack-fingerprints@2.0.5-customingestion.20190501003030","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Emqrw8U8Ble8hTfz4jcaJAJzB2qpvpuHzBdlYwHDFWiD3ZJr6Y4n9Es896MAgJtDpxmyViBcoefJaVQAx+6DNA==","shasum":"927334960bf98053fa295281c0632c54df601ad0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-customingestion.20190501003030.tgz","fileCount":85,"unpackedSize":6487193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyOtPCRA9TVsSAnZWagAA2pcP/iBO/v+GK2VRFYgnod8T\nKvD1IfasHIf8B+cg5tcxB7TMX4BK36ljMtxKvFIov9nS5HOE57zVeuQcUFNd\n2cbtIc4yJo8zG6n8GVL8OHfuL/z1T8XirdvZqyKXZQAeN3zlzRVf79lmqiJH\nklL46cjK3opkaSeRJCOQQvgY3JVwLNn+RhgZckOnjE+YzWDKNGISuCCNZkzQ\nYVrpxHbON5vN8sl+3DYUsJVdsjqdFR0NSr5c+K23jiwIRQaqG4hmg4ybofhQ\nlAw27TImcCsFEArIIq/KrGw9sImo2DW73mVKewTPHV9MSt799P9N4WjP6z6/\njCKsMFYZVonxHG+JzYiOIOWzwTnfXxCp5laQHQhvaY/TB9R5+D/A0MuL5tkJ\nl8qOjPDh1c7AXj3o1zpN6c4BXttUo2J7bXzQkPwKLiLkC9hNpSZotDNfhlHb\nBkbk462qFm1j99gwegG0Y3Hn4XtFHIJX8W8Q9qzUgv3WmJfeiSI5YNdBCXwh\nLPz/tBZXxPIO9SBlDyCuREAU4SKqSVCiFJlNML/+FccaKFl9kHJ1jvKrv8Bh\n/FctgmdhdV+6QN3Mn0ZmXY7+ePzVhMvccmNeLJPYVlVyJOwi1XmOiaEGHs9D\nKi8Eoyo8zOFrUvPcTZ3DM9/1dIkeRoV9VAhDycK5uOvjFMgegAWlA8vbyMyy\natfA\r\n=tMmT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiMSdCH1mougi5NSk01NH1ctrN2F+oYU1to/4hp0YKLwIhAKQwjNbPoAYnnghbWHrXrSCHOvQDqGNK9Uyq911O7P3o"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-customingestion.20190501003030_1556671311034_0.6107414548923695"},"_hasShrinkwrap":false},"2.0.5-customingestion.20190505065635":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-customingestion.20190505065635","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"935328b369f4b47a837c9a5209e9c6e43fbadb5b","_id":"@atomist/sdm-pack-fingerprints@2.0.5-customingestion.20190505065635","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-RrEx5CHHmVMPT0ND5AJQp8YjU5+EF655786zbzSiLkFoaZMmX17yMH58sKUrsEIBFN4F2ndPF8Io9r0gniHqnw==","shasum":"6c308ca77d9971988918dd9eeb3147579a9d415a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-customingestion.20190505065635.tgz","fileCount":88,"unpackedSize":6496840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJczotaCRA9TVsSAnZWagAAZDcQAJhF0hSwDYWwWkkFzGnB\nU/QQCn6NQxQ9d/B89YO8dePHqQDr5aSDSU6ElrxL53/84AX87odwZ+8P0iPI\nCdzd6O6RLFc596H9PAxul4CgENnl3HGN5eLs/NHbfrqyts7cdSp8+NPYanbz\nY9xmww0FXST00hruUbD2fm4NFOcCPiDTPKB58QVY/hSHZSVFTKXhse3GGbGp\n208T2zzH4QhKv6EltxLa9Dey3ZDptFdKetGsXE7yEE7UhEvd+kI94vVFp92K\nyVKS3QRs/smt7Fiji5Hgz4i0QfVNmTUWOuMrMjOGW6MZDt5SIe1z1i56aIdm\nk6TDD95RzaXKT8EBqNuRTF+ZhitM7uLh/SQRNFfsQOqGV11mUaFhquyr3VeI\nixHgUhwV1+pNYwVDc80GU/R4n2zos7jj9T8k1g7vzg8TCNvuJW2QeF33rUhV\nviRxaCJjgY7Oo20ifVLt1ixSp87P7YQiuUOStpM89SaJNsECCNRw+ZhFaym2\ndSNC91KE00tg2Jghl5xLBoKgFU5+GU0IiIawVnfR0v74TlRsj0TfYzSEaOMX\nmJuMHptQxcD+G8aDtbYAFuXb3ly9wY3XEhy4U7qMJhxBYayc3B7yJlKPNp/Q\nGaMRN7PRJTLZ7GkJfPLj3sKkQIE4tnm85OhTeIEzg+vmqbMp9y1nW9pXCkJp\nbPsE\r\n=WBIh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+76+Wg0ifwJkutDHRoS0lVot1F68geK2813xPmfbbHAiEAwddKqvHn5Q4dGCIRvcvpUBJ5yZezWXHdltSdnRREDk0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-customingestion.20190505065635_1557039962024_0.6613843012039906"},"_hasShrinkwrap":false},"2.0.5-customingestion.20190508055419":{"name":"@atomist/sdm-pack-fingerprints","version":"2.0.5-customingestion.20190508055419","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"98ef0cf03762082e5d78614184e9a4b2e3a4417d","_id":"@atomist/sdm-pack-fingerprints@2.0.5-customingestion.20190508055419","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Uei8HTbPvuvUd2LjN7xnJQR24Ov8UD8uxV5A68uQOq4P7TWVFokQGp+Zr20e4hP+2pmpvJqp6617vO5ag9P87A==","shasum":"b3a8d61751be49127adad01f12cf95d45931433b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-2.0.5-customingestion.20190508055419.tgz","fileCount":81,"unpackedSize":6111891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0nA0CRA9TVsSAnZWagAAwwoP/jAnQaTyrbYVXjEvugB8\n0LH5AgIsK3bs7vAuKS5QEYs58+nrCY5njpHI5bhcvzQLm7jPK06RnWGrs2UX\nhWY9XXZLQy4YNtpvZiig9/jt9OFmLqzpm66Fi9h7obUeU3Aa/tM6ZJmKrQZQ\nbyoBWRIPzGp2U86VaZXebJsZbiJGh6SKEEkMdBNSLmnJSdOhI21SV59SnARl\n5bbsXpPIuQZK1qoI5R+c1LInnrqik6goUbSLJ/vrFN1XFd/T1e5/v19ir+x/\neRWYaL4MjB1uF8PYbd1NPUp4HMUov/x9jSZuITWMF2sifiXsyfztwXn+H5kE\noo6qLgO4hAhsunWPGrcQZBH93hbd3teRZir6AS+nZHGuWGuysMrP2llPMXMW\npGdVFLQakONKCVEAtpOo8XZxJESArKR5VEwVm6z6YghFo8Zanlp/4qpcNe8v\nkQ1/gjwA8FVrtHlrZlYvHZUSgfwLizVZ15eKgc+kK63Pz92kJyvdiQeuLLqy\nUs6D0CzNWv6LMD/dHcXH326zo12wbcPEJbEAbi9nT2XiQPlRAQ+3wcFM/ybR\nB5oR7RN5NqhSxdSNhl/bT8ixzkGQ8mcWmvoZc5Om2JMI6muPv581aQPPwgFw\nho2ClVdhQJsIpV1m9+XZ3gyiwM0CTp78LvqeUsjDfbEWsagvpe/gtwBRKr7H\n8aSG\r\n=V1vv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA89JSP2bCRn0XSlDyTpsPma9/M9GQzjivAuWdfVylk5AiEAkjD4eRTQuIf9zwcx3djBqr8QA8MD2pP8o16pbTMRCIg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_2.0.5-customingestion.20190508055419_1557295155359_0.9279828965685557"},"_hasShrinkwrap":false},"3.0.0-customingestion.20190508082003":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0-customingestion.20190508082003","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d3c46954433e448f981e720012060d734a76653d","_id":"@atomist/sdm-pack-fingerprints@3.0.0-customingestion.20190508082003","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5O+8LBX0XfiiI6xuIaW+n8wRSLXFO0LM8T/WEC//MgSnkN6TJRp6o8s/lBGzebaF6FROEQdb5MSWeGRSQyA+Cg==","shasum":"2c77df7a01d9c43d340c2fbb0c17b987d9d1f348","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0-customingestion.20190508082003.tgz","fileCount":81,"unpackedSize":6110793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0pJhCRA9TVsSAnZWagAAkMwQAJE/ltOZmQakrPIv6/xV\nIfgN58UYROz71VaY7O00dxyKDaG1uwmjeJT7IhlpyYOjv+LiyRQruY9T+kQ+\n/EWU4gGnfK+9au3mvKyysyOjldqyYmJyV00hKAU0zHjQ6VArKFqAmWvFb/xu\nzNbxTSPJMFVIp+dmhW0vlTLhVMnBD/X3qLzntCh9lThuozKNfBMjZBVGdFkp\ndfrRjN2vrmyx7nhuST1GWerr7Unu5fHzOT60tmcy8lLZKGiYQxOMwgqIDRaI\n9f7sQ87yUn0i4lbmMwbJdn1gS4eRP3zD+1zXWVAwZhn78bKgc8OUjyTJnS2n\nELjFOoBNE52ina9SMEGqqbiouXoCRwrl7NuJy8RehC3BreklNME/aazdyBa2\nDV+GxSILOvLR2NWTlFlZg6/VEPNB9Om006Ohh0mh1Sg35zhzixwlyDgHHM9S\nFgowp0Nc2wuTeuuoKcfgqowFV0d+C6+qY/jZfkGaCH9hcrl3QhxrSkqSSylk\noa0xAKNbTznN3b4mzvh418MjQbbfWCHCGewPS2Vv1gHBa+hcdLikmo7N6d2f\n9bpamFDpRV/lvCUsLd8rCYYaDovjHj0cfFYBds3Q5zpxyllpLK+HNxDFyEH6\n5iLODDqMNnme/8SnLfrIhNGizdzvI2d/bcfx2z5OcbeZhkw5ii2T7r3De80W\n2V3V\r\n=oCJZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZUO8L6AfZxmygB6dB4qUrQ8w3v5JlmDoZZSqUVT9GuAiEAttnrZYbqMf58HWA40XnfCPSJbBWCOUAwrlIGIC2BLDc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0-customingestion.20190508082003_1557303905012_0.30398845458350965"},"_hasShrinkwrap":false},"3.0.0-customingestion.20190508091220":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0-customingestion.20190508091220","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7997941801ecf08b4e6939c0b8d72098ebe79ed3","_id":"@atomist/sdm-pack-fingerprints@3.0.0-customingestion.20190508091220","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-PKbxn0o6a+xh9Ce52bQ4QiTa9PN20SjBE2NKyzm6zdYtuWl7oKYgjtoDw90ldX1H2DGh29Ya5wVsYKndZI52oA==","shasum":"0471e22dadc84e84bba8bcb36a1dde6266e01249","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0-customingestion.20190508091220.tgz","fileCount":81,"unpackedSize":6110910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0p8ACRA9TVsSAnZWagAAjq8P+wY+B3vV4mFKZWiGYGTg\nnwmQyOOck8J941vLYkT5MXpqWcKi8wCHXuh3NEqnWEzOSZy4VPkwHHn/tqoC\nOO26YdG6GhC/gl2CEr/jyJU7ScKaw/NBDvfPI+17zpFkn68JVKjW+y4OSC4G\nJya+VB2EjEqMZfLt1KoNBB2AJFkgbrO9x4v0/8+GLm0jl1lePCFmXWjxnOEy\nvE03EvWOgUwV+kiibQzA/fIr/+sWifd3PG6TwyghfltJGWiMSB9JAI5AK1nR\nDrhJmSdKaj9DaIpDFC33hzbwN1vAEcfT94Usmevjv5JJdQeOqOOIsJ8ztEzo\n8kWsLU8WJ/hoDGfJYap3FACWyYbdzBooW9XcaCugoUqwS5MQ6H3VzknqGGyw\n6QEh6olAfnMbsfZP9PzBEqQGoSXPccxHI6oKk74TYqVEC636gcHriqnJldot\naGzMev3NQLA+DbCsC08QwQSgKQZSFtxRFdbwkbHzp68n/eXNA9c3Wlucx6jA\n5s61dcZ6IhaUn73d0AUUoy7JznafWg0+iQFDfQCLhvFqXntZVsKmP6PL/o7y\nVV4/cYUcWTRDBWiWFAJnP+5OZ+UsndVS1mFXqd+6WkSeft7wdNsXHQIanPfm\nuFqqmjsP0NzfZ+RfYAsY3d6vEPBcM53UFdsbP9/D4gmo3UH07fIbxH5dpBZl\n/23p\r\n=7YI1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFX0W9dM4xIXuf69DVhKiyZChinVZuS7HKnr7ny2g3NDAiEAskDStN6nJnCQX+Lpk/YD1dUUpHR6t+O/82WyK39WmKo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0-customingestion.20190508091220_1557307135215_0.14155647540433502"},"_hasShrinkwrap":false},"3.0.0-customingestion.20190508212125":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0-customingestion.20190508212125","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"eef0eeed798cb5ec8db77214b0b57ebdf9e92fc7","_id":"@atomist/sdm-pack-fingerprints@3.0.0-customingestion.20190508212125","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Wk2MS5yDUgIl8reg4Y/VfyXvV3YMGL/h8bWh3naypIVEdnTta5RfOA4d6WVQByYYnLmi9AiavwxxhxBCstyTCQ==","shasum":"c3f25c9dacd1c6ab86f4c7eca71d73f4b62f2c9c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0-customingestion.20190508212125.tgz","fileCount":81,"unpackedSize":6110774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc00mvCRA9TVsSAnZWagAAUGUP+weF/YOFkaa1mp1o8Amh\nYirPfStUT0baN4yEfOTUAUPwwoYGC8wwSGCJtDNVDWr+0ta1O+GcGZJSY9Yi\ng2PD3TbnJe/ZrOXHmfNV//AkW27ZkpGStNfjBGU9iCYsqNTAfDOtaWLfPmaC\npHuWrwR7gn9bxHAn+mmg8gjOVOCZXBmf6Wmsc5iJ0918rDe+fZNI7NXmKc4M\nStflsnkvgV74uRgur3D7pYE8ucCjt5m4l/LsmCNhtQDgn+rVNlVvbrLXGq7W\nL4C5J6wIUBw8sVeWLK1TSzJNGAN0U8AugtIFVtvQ14DjTsrJJ6Qs9TvxE7Ir\nXwgN6Xuv8hKeVJH6X2IoZU7PoSXfiDHd0gtRmMNomnQOAHqb183MjcE5c2BG\nxjm8K/2k6rNyOWI0AgHdQyS7NviFNqfNl/Rg6Qh2XWWARX2YGoucFtF96bWV\nd+IXtiQr/j6LwV+97JHgSOEllzKkTJLb50t2wKD1m9xk0XHLXHAQdW0hDsiO\nYdmg75+ALQ5I+1LOgtmeVocz3xOTLz6m9CAzymiJHSpO+etIWQOu3GIyq5In\ndrq2dKZOUWZpRRVUZS03FFMOk5szITNMWCr19I70F1MJEjtplmD6bevzHtyk\nIhrdZN8RDDELedsh+bbfA39RgQ8XKVT5Hykx7emql5AzwMXxvDeHZ2RWEd50\nEzJ6\r\n=wa5X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDQjlYwIo2YGR5HUxyGVHR1hdhlvVRy6JEgol1N24m/gIgKbzpWIaFu8V7+du565j/zDuPfKBRN1cIX245o/lvRGo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0-customingestion.20190508212125_1557350830103_0.5408710866987589"},"_hasShrinkwrap":false},"3.0.0-master.20190508214550":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0-master.20190508214550","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"34638432b9133c2485a3366fc688c1f131e66ec5","_id":"@atomist/sdm-pack-fingerprints@3.0.0-master.20190508214550","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-fVMQpsYVOiYKDXMltfyCMv0W2G18q2fAZcwjHs6qy6PAo4WgkODhGiTI2SyqjkBvRKojZRYLVIm5IkVJOzgM7A==","shasum":"b3de5c13e63c6717e6e5c3266697a0781e31c097","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0-master.20190508214550.tgz","fileCount":81,"unpackedSize":5961274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0095CRA9TVsSAnZWagAAbXwP/0FoBDQF5gCv8zIrUyPX\nvHnkKUdEAuM0zfsLgUuqDtjda7g76qwdFujTxviBts7X4AAN7O+BEQENEGFM\ndHo9zUDFHgPokrg8GNa5ORmLQPyqKxxGTRZky8s3oQ30PgPLm5vfGWt2DwMS\nyPMXKO2IaaE2z4IEfJOzZv4r5RN+8OJDzsMG/N5fGDwzzt/HafqtjKCUrQ57\ntGWNBrREiyW3fdIn/F8CDonJ9oh3dslmO2XXw5xf4R93344jbS3eSVl+H5fU\nFFP8yOnRp6NFiDTjA+nDbH2bWyAk73G6xOvs4cUUJj0T7M1xjFIkzuWLKJrX\nfu7ET2x8KhyQTzQt1c4FvgsFkEywVE6m6+b1i0fC5nWmeHdfFMZoDEqoY9no\nBg+Tq47RTbLobCdpEVJJcXZ/d01nPEn+Xr2+dyl70/rBkGxeTMcVOA0hvxGk\nmaP6SjNbgNO01sVgFKP4Rhr1pbxWrnEnI2ACXoqM4Wa1IE6xH6klX1lQJquK\n8oN4lu1w2Psy085RUmJt7ZFErdyhjseuNiugmkvhhnAG0DE5x6YCvTOcumWk\nYyjjIyM7OmmgGU0c+N9R+loT9ZqpVZJyJ6EVOOoT8gdWTvHoUbz06RQ6CaVu\nsAYMqZzuP0I8jTWHGy+HBADj5pZhlsKRTf5zgeDHl/ELsZJ9JAFlTBdWth6n\nxPc5\r\n=Mz4N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeBECdWl2GTmI7VZKeVvEi8ncUnDg8+Sr91vXkx0F/dgIhAJhEUhFjeJWaHfJ2C9XK4wd5VAIqtTHmJZzJlqAD1X5O"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0-master.20190508214550_1557352313318_0.18475137072810832"},"_hasShrinkwrap":false},"3.0.0-master.20190509050455":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0-master.20190509050455","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1c415cd76c7ba9cd5e928e2c1f21aa90ba5e4044","_id":"@atomist/sdm-pack-fingerprints@3.0.0-master.20190509050455","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-X67tLy8jtVt9W5BcKIIUkRQ2l8FI4ba/irKq2TiLKbKuxmlhIt7gPNyvv4/S1R7aHnDjhlo+pHkvXjiRDBk+vw==","shasum":"19385fcfa5fa74003dece160f4871b9ae991cb85","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0-master.20190509050455.tgz","fileCount":82,"unpackedSize":6142854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc07YpCRA9TVsSAnZWagAAJ4oQAJURrWHobq55c2CXPSug\nesYZCSb3OkOYmdgyIsMsYiaW1m2Iy2o4aJj+n7tYsH/borRwXjogej/SHL/X\ngip1k85ou4xCtpad7O1PjwtvaAWet7H89YFaC4lIAyhjtuKsTIbrRJDiEmTN\n3UgmRE2DrIbzYjOOvRNJvTXB4eGH4OTDQ13/Cc2OW4HaxSmp274A5T0aOnoL\nTv4qEpdHgYyZk5jDGClGwJxEaFjsXfSMT9PrK17NmrLS7t4TSBne8XufMYpz\n4T1acNHtAHztCgvQIdu46QilXF1717SD6SMcX2iY+zlK+RluTFcVa22UQmDV\nqqTpsJG/+QKgU0lbvfu3Xn3/QTUFOW66Ib/DgOKHXJZUgGFCQCl/f5rVdtsh\n2/gIvdmWmf4DsPkoiDTzWrvKhsXHt/0ZPtDZEIuqvnSc5AuYwiMC9wASE9iH\nAkLMKlhJJvQWG2ED574umeQWWUdU/1Dh5Mb9EnvACP0QwPtGDR1j/EmkhuFH\nooFcXkAGVigq63gnBo6dPzHUgEGvAVV364lHerl4DD/l4H5RKq7B5T6VjOX1\nlnpi7S8VUkhJmp+LzATVrF6oOUHcfT/lJu3gi1u7dykItHtturAEup/cPkR6\nIa3mO4x0C/iCAuW2b0AlheHPfhfABUEKZBzn0OD/w8o6hWyP1imFtGb0dma/\noK+0\r\n=aAkg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgqTeCkBPcj6I4WT6ZAMvaSCdwhYwjrV3rHLG27zC+XAiEA2PGWXU9A+BsDcxCvXJwtE7jb0nuFVcvXwbbntngHWxw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0-master.20190509050455_1557378600636_0.48219288155525675"},"_hasShrinkwrap":false},"3.0.0":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"444e0d9d4015f061216238c7de5d2fbe3e43b7af","_id":"@atomist/sdm-pack-fingerprints@3.0.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZQ+fwYbOHnfysbuEm3Lo9bhDKOBc9mja2u/6mxc9VswUEilUFDp92VreYC39nZsiCFN9PQdWQVQq0eHCWP3b9g==","shasum":"9e65e6be7423194c38e21483c9b7a08c37d2076d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.0.tgz","fileCount":82,"unpackedSize":6142832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc07dZCRA9TVsSAnZWagAAQGMP/ihj6/JyEyhc/lVzJzQv\nT4YBxuwUuQSF7VQBCsnsfy84/b2dSCOQKZwj5ILpW/8+xI9kPGk+8TOeGnXL\nNd6Bgh1CPFygokOEK4KGbJ0Z01sutv7J3bv6xO8IFJkrJ9NunYwjVLTW0+zl\nPt3pE8/uCH+wq58Bs5ivjYJtSwKo4343+3jkvc7hvZs3piwHUnsSu5BBK00V\nqcEzPDhiUC2FhactVyeLCf+j8ZFFWtXrTbZTLiGgcKyWRirmwBumEg0xef46\noiApfKKX0caSYuim3JxiNuXI8sXOZsxpEBGSV0j7iJuHUSD3nhO1TasDRta4\nO/QRBGBJLfFTjhRHsHFA4+lzS0FM51pJ6klv3SnNujcr9FK/Rbez9tpEzfPk\nsx3WLatvJJ4KFWwO5AjBIctYd4EyreB7mecow+AxT2nSFDH/XrcsRntr/ZfB\n3OIu9iipwUzNlMHjrgo5qyoNR8YILbAqqMDyKH0svXyP0qwQuXxmdoRCgWFP\nPom/UmRZHkSxUUc+kB5NFrfyvWgc3Wjhdgbt1uzGkQ9o4erMsYuNzCPMhYb3\nosU2kYrZpsfMf8fLEtFP80/Crxo4mQEcZs5BhwpnPAbdP3dSlHd83YNxKsn/\ng7JhWBMdPch+S5d0OTmCBDdvPpB+4xIUWe/SfhJQVmxkJm+/LLh3hJjJSsGS\n6qIn\r\n=FyWO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKNr9ytjGgbj1nK2JRNkfmk5SxxoU6DHYa8vId4G5+qAiEAurqPwUGFmE33/ACYIUgEK0oweXUt1ILZdofsP/PP3SQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.0_1557378904377_0.6008304718111717"},"_hasShrinkwrap":false},"3.0.1-master.20190509202631":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.1-master.20190509202631","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a19051fc85d2684c822d46d1a6aa6b980f5cb86e","_id":"@atomist/sdm-pack-fingerprints@3.0.1-master.20190509202631","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-z1FQXxLqjVloAiYQEtoZwym89JhJ+I14b2ts5ngoXpaeO4MnmZ0D91dcM7+OmV4KrB8EfN2VMOo8cJp4YpxOfg==","shasum":"7f726bc4f4a18222bf602944d1ba9d19071bbe5f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.1-master.20190509202631.tgz","fileCount":82,"unpackedSize":6143243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc1I5cCRA9TVsSAnZWagAACCwP+wcNhtECPyEpOzcVR4bk\nVSokvlXD0QfHYjKIZX/VoRNzAY+PUiJH98Ua+a0DkgI8tLlWEgmvZzYn6+ip\nzcRfpdl1C2zr98dbSAZXLTRJFW+2LC7f9FCobmZaJfBDHijY0p/TZCKI+wzK\nXNNb6IeoUBpj82hsNIRgigswo5vOAPIGgsNNSUXRoD0p+4BCDB5Xum3bnlP4\n+eNwSYvNMai8DwjEctF2UCfHW820hjjNc1cxDo1HYPZ1ayjV97xEnkl2jPci\njSP1NVYBtOTGkN+XSeWhaBSOfJJ0kJMXhp14c/Wfpaz/y5jAVbzF/v3AsMvb\nHkNS+OIPELy2oPuBbIOglyhG08CTw/NF0WJxWJrYNrgzryJyNd90Lm8xujqe\n4qfji/KgnnC9WKXNmr9hTlgXIBvvRRgKg2+Wv0Ae0o2QHwjOz7VST8zw77Ee\nMPcQjvh/cnKpC+0KzOQwdLJz25pyg6f7OKyBRb9nZxP2o0LSiYZGqPkqY6WY\nkCI4r3jMBUy8H+Q90U4PPpeZP8RajRjXcrIzGcxZ7Vv1L58fqno7QWvER13x\nPhgo7Bj2UXyVPKycEu6MFFQ88Ea4izTe8QG70USzh7IjJrNLsoWJD9SDz++O\nugnA/YjUH+eBLvr7tdc1ivwANtcF+fWN//liSNp1NwaWFUMMTbrPr8TPmR9t\nyP+m\r\n=0VcB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZ9J2EFmZPXdL6EJXLDGXvIRitEk1U4lS16WxAJDHdUAiAKyJ2iV3BIEHhieWU4xgsoOD4hYLW4gcunyA7gzQ0Izg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.1-master.20190509202631_1557433947823_0.4035281205573251"},"_hasShrinkwrap":false},"3.0.1":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"de32d5357ade8268ecfe5b5bb36397b9623204dd","_id":"@atomist/sdm-pack-fingerprints@3.0.1","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-MteB0hObZxVY3FhtBeA2qb23VDo1FyVhwaV4GW8AhC+fwfE5TKi4sgFHAzWIk+aBmGFOtGnN7tKneDULHton6g==","shasum":"2eb95065e6a4a1f9f445fa65ac9dedee940da887","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.1.tgz","fileCount":82,"unpackedSize":6143221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc1I7UCRA9TVsSAnZWagAAcdcP/i4rAPOs6U3avSpDPUK7\nt2DynMsjQjqWbjpGFYbNN1UQeSy/ZdxYWu8l8WIENNP/sniT4fEh85s+gbsH\n6ewYUNXHu+C6oE+KWmkD/q6Zsk8se3Ee3ZUUGtHXEfsN4H/npJh8/+NVzLfe\nlqTuG4fzr/1CC0metL8996yRoQOR63YKUNcWrrXJwSz33XfTMzLKVOmRS+mq\nw7Q2ESWvapiJF7zusg7QYPUKuJ5oCq5Nazhx/rqSAaSJwtE5/TuT5DhBU3mo\nvnW1DU13rQ+ZMilS6rZtjiX9H/W0zRPsSxlzECeGaKAgYJb+7f3xjPdj2Ao9\nGnbBlW2sSlPtnbmoSDgvkevrAgOKKGnCGYEU04EGVSU29ugcem3GOwJsFCrS\n2y9PM78q1wkF6SCstH8Iv4iKYYH01L1tb8T0NJjJFJ5r0EHYFgJaU7PBJJe2\nblM4dVjHTMgn7tXD6y/xK7QfRVk9AO9gOZ+PUFH4eDeJ6Cy4K8debbCJOOHr\nf0BEBIuUADm7G6SN/t4OmKWUIO7yetS8zHeNVuOiz89sTIg8sBssLnu1Xo8x\nP92xBz465v/PsR/ZPv89UrzR59wfJOYR/zEXgmHt29hT0mK2dpzIKdwSUlfp\nUnXoEwR4A5U9hwf8DsoOJ5nwtQsYD8S7nato3Dx/83BzNbRF9yJcHudsVjw5\n+3+O\r\n=+nEW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKM4sb0LgUGZ7YzUOvf3gh4w9pKembfqNl2oT10NK5TAiB9OdnCs3l7zEuA+bzotyrWl6DJCP2QtcZrFaVLQbzA2Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.1_1557434067991_0.6675240763079082"},"_hasShrinkwrap":false},"3.0.2-master.20190511023846":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.2-master.20190511023846","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7c509d730e17d0a9f94264e82eb37edae89bc538","_id":"@atomist/sdm-pack-fingerprints@3.0.2-master.20190511023846","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-n1YAQBL8PNTtSJf+aWMenwa8TSbYm95nMXIw59KYO9dlxk0y92CrXqh+YpiYVkH86c0fJv2vRCxuiGknITgCNw==","shasum":"c14741a011b00c342e2f3ed123ca591bca973c4f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.2-master.20190511023846.tgz","fileCount":81,"unpackedSize":6129981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc1jcYCRA9TVsSAnZWagAAGoEP/1fUx0jX7uQdcG9sU4p8\nuWA8GuS0WnG+dgxi++pEVjj7Lk7iLfp8KRqD0MOsJRebu8lwt8bRFmDcVbhN\n5OcjyHglVzItmGOBWx7A4U2Q5o06cVoxJzV62BgpdmX/0KtPtND5QakpzJ9F\nrhiR5sR8v0RkRfWt/TMSNybEa7YzjLOMpgtG4YDKyuN+dYwmD89G0Y3Ihthl\n4ob2I7OucFNrAOsK5JUXHf0thGRgoq+UbVQCFo8uiH3OJS+PGW3HrAk1q+1j\n7yX0ABdcLKXtiYaeROsfRBrDXJs1tzi3FpF1pt5rgLtxsTZ9BYj1JzEmtyla\nYzqP1ViuBB6hTHUfQ0sOYmGUQJiBKqDOhUd39cSrXYJf2zLLoQQaHwjj0dQi\nmaeCPD9Sa+4nxaL/8jM7rGZp9GDWpM6SWPiflT3xqJ2cKCekRd7PYQ3op8G4\nFYbcZcIpnzPXyb0MhD8tW0oJ1Xcm0KYkqNcyWs9eOpckrsiqItJ7/G96TRJQ\nHVNo7LqEJ3KVfEbmSs3hRN5S4RTJ2yoR0i8AhWmemGhOUAeaeJHLFW3cshsj\nPbtJCCteZBFp2tKwaD0CwLIpQv0627g7UnsuCzbwTvkHtvcaxwIlE/yMhHN4\nVkS5gwE6FhDMTC2kT44ZsidONCrk58/jYYi4g3F4Y8u9NDelNZ6SFqMO6CLm\nL2Ra\r\n=MH+M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKslmk/HaPTxAzGQp7gYVk/ehbGARoLssNqDQwuzEfdAiEA2mBUBrktrlFPOda3VDAExff/nqigVuPYcMlw+IoQJOk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.2-master.20190511023846_1557542680077_0.0629107601157517"},"_hasShrinkwrap":false},"3.0.2-master.20190512014018":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.2-master.20190512014018","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"64e2e0bf53f34f70c0b20fe3c14552eebb4a4e5c","_id":"@atomist/sdm-pack-fingerprints@3.0.2-master.20190512014018","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-laxg/U1ib1WiHihoYRov4YQdfYrVdYcLQj7CWF+qLshewA8dbj+5ycb9zDGmMuBkbrFAolud124MRFWZDmPX1g==","shasum":"3d905a42488eb9ddb93f685390b56861af546930","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.2-master.20190512014018.tgz","fileCount":81,"unpackedSize":6132460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc13qyCRA9TVsSAnZWagAARSUP/3px0j2VIryhF/42N71t\niJTquOjTPKK9VO1zLzNlcGFAVEIyT17VOoysGdPHlz6ZJFFarsvy+9wn2P0k\nYPEQcU0Z4B1h9dK1Y8nYurDZq1y7bkLGmbbyGS0P9bWWrN0i6cHlE4ETJLYn\nX7xKqPo1lkoYgMh3hrrakWMv40ZYmRz17c/RbgvcpYhJ2XD8jaLeNx1bmOsh\ngwBfSVdOI9hwZl+3hOyi01g3zEZtuhP6QxXDi4Z5ZME0vvPegCc0zXQR02hx\nWg6u6PPNq0kS8ab7gqB45HkgFg4oMY1Ey341EzcZGN0jWzpyox1musdoRROH\nr+h4zBdSU7/2iFy2FkdPJZVH1mT4Ld1MOW8Z9xEWsywLkA5PRjYzsv+6vXn3\nXfyG4Zx7MveAd8MlOS3O6ytxVoaG30KrUnhtNvNPCDGsMWZDLH7CE3BGHRJD\nkfQc2W9/un7gwIYZbwTMDCcCFKojMHpPVMw+fsIuVJPXJdNsexQy0Pst6paN\n937ITy93fBQ8m1AfKEc7BnvSIdsEqkNOm0bjxanJBg+a59cpj7BqLpNM7Olj\n6fLPfbVqhiuPQ8ADVrCHupY4HV40uWsPFtObfu3RH6FU9tKh2pB8c+jSZoY3\n9ICE1Yyd2pxZxPl5taOOIdQm0o/6DUSfwE2BOGYNYtodaWLywxO2a69qEsPP\njE9h\r\n=XE9w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMu5Rop9ZTreken6kI+TLTOFzX+u1QW+SXoAfnw/u8VAiEA/HLGLL4MLISU8179rlERgCokJW2tuGbpR3xstMo0zzU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.2-master.20190512014018_1557625521807_0.25815558786459447"},"_hasShrinkwrap":false},"3.0.2":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"635c2d3e0445dd2aa8c021cd77203cd4a025f707","_id":"@atomist/sdm-pack-fingerprints@3.0.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-i48WLdVXUZr5f6a0rfAnTZP0iyp+xmlTLKdQGbjEBscdhWma0j2vZfA2TlDUqz5GzMzBSdGtjwG4k6/9fYNsdg==","shasum":"dda09061ac234aa2688353f79d139b259728f48a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.2.tgz","fileCount":81,"unpackedSize":6132438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2kSECRA9TVsSAnZWagAAwLQP/jwUQmOjwML/rWyGCdJ7\nlNlHoT30RXYIyq7JeOKNq+KKdVXJGz0Ug4NGXKs7vD22+/3JsP8TahlCdTGV\nNkdleHGViVQvv5jMRlI3JC0fMyFomsW4hA0HoXQlMhTt1qrXAnLmUy1+A8KH\neeoVq9zRTBftTjaSrYG5xyN98t3L3e9rSr05v/oGPQ/jzF2uYHN92ZS26aUz\ny704l8Sg0FlA3YF99qh5vARNh+zEA59H+V0AdSPxWsmIRbZ+NEchAMSTaI3r\nDtld5Svfv0FGvisrH3Go+GXW6El21wGOccdo+yhVnR9xUP0EYR6ze71/oFa2\n72/9+9D7a72I9gYxZpU5x+9rb9ZVHCo2fGc36QskRCVg7GgLTV5+NWfh9SMm\n249ojPisdqZh6Ou43nFamGZq5X+FJQBk1qiKA5Ap9RBco1qCfGSNVcUkw+WA\nP9/WSwLjFCQyuX+BVRzLe12r2UDddQ2uCpbOMl9I6rVfkDop/kNFWey20d90\nnUDCNncT+HduMyMWT7l4IOqUtxrEpWrR+tQW+N27nw7bku1kGvbG4cM3dKx7\nODW6EVTdc11p5Z5BF3djRVg6nnVsw3qHW28+wZu2ZUk8RUzutDbCht7QVjcV\nXSskuXpX9ZuidNdqzni82gUUo6MHsOW0r/O+2ylbGOeHcyWNP8e/bGaBXwBB\nywcn\r\n=B0YU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpXvfjfbRX+NIBkTQHZHLfnsCGxSoP5J3x3Injn6uBqAiEAybnj7xKJsKIYiXHe164JzwrmKJlSCmRZhOyqcs5+Rvs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.2_1557808259392_0.6352598288912485"},"_hasShrinkwrap":false},"3.0.3-converge.20190516215427":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190516215427","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4938463a9226c4a27dc2a851eb936c795c8c49ed","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190516215427","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-8y0SULM/Ev8zaHn7fswnM1cgjmYPPac2cZGzAgj5AwJYSHz9JtkEegSzVkl11/C8cKzxU2YRvYpdKllld8LaEg==","shasum":"116bf8792cca5135a13250b38dbc01c40083169e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190516215427.tgz","fileCount":81,"unpackedSize":6083677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3d2RCRA9TVsSAnZWagAATjgP/0SUaxohwELKldCymiUX\nosZttM2SCOLb2RFnnBvf7cxksCz12C/ZY3MxS6RMzGaUTGYJ0RHwriJY8FmA\nEe3BcWlEW8cZAxNoe/8PQvS/XCjMIsX0QybmxVe/UwMMU2nJJvEx/MyOS9b7\ncxiNoQkumKfBEVLTfOIbP4aBInfaJ6ULtDxFncsJVBGXeKFLqof/LnXsTPMW\nUyurqeDYqo/hQwZDxvGa6ClSRojWSZLlaRz60+Rk0YFrdlOckTTRKLmr2q80\n5cipLmgIED1XJbFLlxTUmE29bmhsvwFBUje1iPPaizvpb/1vv6ATRx/uvTOz\n71e07w+7L4WHmpGIPpNoZcOVTP5TQdKmLzcLQftd28yqESZRNOjC5HcO5bcp\n8L5lUDQxK8vtR35y8okJ2ozs3KgJiKnZx2ZMcY7jOY+nqqi/S7FW9WfSEWdf\n5Su5RdWhF4vL+4Q2bdE3NS3kfoo9/lZ67P2GOmuHeulmt2BNiE8HlC1QeCow\nBVlc8jyYPltExDTVbSL/0pVxstjUzAKrbltRLtAAN1qwkplX1Ea4//kHCDEb\nXjTV4PtahGxH0buwLyjqUnPBWbR/O34eT2R4b50bGR3QDJITO1yHhsMRLK2D\nipP9qMWq/uR8PtcYSgORWfIRDckGiZcT+2TS67I2t0VqWvwdF5E8v6vvYHQc\nwDtD\r\n=80/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBCmDzJAgtVSf0pkpdZ7tYlZsNDuseAwiOECxtZWH+wtAiAeAjJpsogrUxg8ZRyA+IhiWPwmWYLOWWm4DGaf4vdhJw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190516215427_1558044048528_0.4322797819428992"},"_hasShrinkwrap":false},"3.0.3-converge.20190516223042":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190516223042","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1ca4c067296f2cc55f93a7282ffab8f8bfd4c5a0","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190516223042","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-EPrxAA2vulsckKzF2jUfHrAtsNnQtan0UptTON5DM6PXFyNue+iDp44KqQmmrPyBShRXT8Vzj5vL5HplxcAl3A==","shasum":"25dff52f263c70b91376cc4bd34491713184b406","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190516223042.tgz","fileCount":81,"unpackedSize":6083677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3eXzCRA9TVsSAnZWagAAJSkQAIjbs30BcJdsDMHV/goi\nhfA5BmghyfTn8iq8AabjrlAuAQywLRgUvPrA9Zcq6JYMLhZwhDYuHYaLA0y1\nx1pCSJqM6a5A3u44uEup+HOf3Tb0+5kc5+vrlvXBc4ULjX+EngguHz+2GOdX\nRXsu+YLAHKEw+oKgLOgW0IX4PON+ebgHn5pk3OWgUNOQb14xlerAgGtBtRzn\nXkgBFCuQMIL6kyN4lS+RieTyAl9IKbZedIzajUWcosJwaLtlj4MgDgw7se11\nM6CDetP/Cbp87ku5aZm/2JI3lr5bem6HbS2p8aAV3yA7fIg62oeHNbp5+pxb\nvjOe5a1gI3Fy9oFqzHvy4Z3ft43ZJFlG2L2gUAJli61ZIkhSFi/+gEZ9idiz\nqUjmBzFOAxF2rUJujo0X4/06hEU71rCVzKbf0ZWpoWrzB77fdZz4RefoTZU2\nC32XBcrQiGEVA44AU3+jS1kS2fnibicnILdXp8SaZNYPqXE4vyRsjwJUA4Pe\nv4ZANAtZKgVKPgn6aWxLLSSJjFqr9C/xyoLYWmLXyIERuc4qPFaHQa3ftz02\nEaCAbVszDQXm/rLOc7yUxetrjUR8t3ttKDsdAYgAqebusi2H6cJJbieAqXv3\nIp9fmHPY/EadvOhbEMZBe81izORwKouy1erSPj6P8v6Y/eAYfUcT/lo4hKY0\nwWdF\r\n=e1Oo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/cMkV45zMP5fBqt48mXstzmv3JSfj7Hnr05b+zMxzbwIhAKfYOtDQ+1n330sW1yf9KmgBKo7urxpyxffGnhyaTPlU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190516223042_1558046194756_0.8132803543900922"},"_hasShrinkwrap":false},"3.0.3-converge.20190518194526":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190518194526","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"266f1a56c0bdc74b5b3aa2da757d7a8381e99f1d","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190518194526","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ltYHMZ854W8Oj6Y3AQ10ZeInzPRQBxXkMz8O3bec5pKeaM7mKz1SCueVyBGerHmTENZNLi8Yc5R6G7gO8DxtMw==","shasum":"012f078c88ae241ab6e68b6f2ebe778b2fcfdb81","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190518194526.tgz","fileCount":81,"unpackedSize":6083678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4GI+CRA9TVsSAnZWagAAy40P/j36Tc7+JqR4KaumJfxe\nXfMqPdqpaLBt+2PLwhXOD3q3PFjNY+LZLJvVm7ijLJDjVX4sLdOUqNytruUT\nMA+9BM9qaJMiVYwswPdYwGfJn/4VMJZMb6Q487VL1LqDpDOALB9fAB/W/adW\nuHAITJMs1RsRlj2ClHhjPNPD65CKCMJE/cJSISvTbGgKiwVx5p8iPlw1kp++\nF2mUI9K9ujkU6EPXX/tOF8lyQTx3PBxTupbMaKDMyj2vMcFlWdotoR+EdYLD\nGVESFDPZuqmI1oApRX05CwWNBoIamGcIyKe+KsZr1JXI6fzLLEkERCooKdsy\nGQPcXJ06PSL6zwReGx2hiHwwxd26pF01cwKrePZP+YxYc0IT/NMQG9UMBRAz\nvKOjqy+S3uZN0hBdrqgcp8f/p/E3z+iTU+1YrYYcQ/RkzT5W1iy8eWvDF7w+\nM6EpLDdZbznich3nZlA7bpfUKojkECvzMWzwr8L9qX7j1psJMuFiyTd9uLvP\nuqC29W7RIiFOv9KkKJS4wzbeFzBQh72C/atMHWZhp5KdHf1V8Ld1VqpShZSt\nB3vEtZ5zXv/JjCUDMrI9Y8pC8pO/vDihypjbwTO2DWuGbtESOUJj3BqqwJti\nEkAP5bV83e4gY9YOBdRIKgIRiYWPPsz1CMkwuOfKMe558t7XoEXmShwvOZj/\neeux\r\n=a/fJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHP0UQBCucdM34VtWQB+i6SiXDdWKxm6QRwU5zRv8IpkAiAMiuWf+UnCc40QCphrb+I/kj5iIHpBaDGVImSERgE8iA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190518194526_1558209086093_0.4416141019280253"},"_hasShrinkwrap":false},"3.0.3-converge.20190518212054":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190518212054","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"967c597ff9fc67fc8ace69dd31bc30eafd541296","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190518212054","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-c5LAbMN2W4rU776tAz0jn6RAFWF9q5p9TITD6T83UCpgYRcjEDYkTM6VBYnaRGAIWnrLsyJS2scdNuvu8oc3pg==","shasum":"619d9a18b84679ae2ff5cdd299cc7d2969b5ceda","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190518212054.tgz","fileCount":81,"unpackedSize":6084188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4HhgCRA9TVsSAnZWagAAzKAQAIGOwMZWASyzxbIYCM25\nFA92wPCT6scIAbR2QHO8FZcf+WjfR0+QUR53RJj205s+3poyiIYWewqN6/EF\nCqY3/L7xxXA4jq0ZcC39rrCU/daUwbd+jvRvhka5jf44C+J87yX7IdjFioBC\nldG8uuvcjG3rir+V8eU5rIDdaHWAS39KgvYHMnmoKqaAybdackbd+hvJAux/\nTkD+H+33Y4Ft3WgYCyYH4U2ibybIv0dh+YYQQ4rIjjL1YCL3orI18TgpDvxl\nxNlQnwoJ05LxSCm3OiH/QMpBaQEVHl+B1Aiar9zccbfokkivQzQNyZrs++lP\nChEDxZ5/4tO9ZS2OwrdWWfm0XGwL3MeoIvWcRfuzcKxmsubWHcPaa476Isox\nkXwIVMlLF6f8pLlYnIFk514OY02dO94U/Avi7rP1aZkq2AHFoTrXRekl4xu6\nDTZDhyBVy6vKic/uRLMZBRhfxUy8K3NMNk8soQQLYPHk/D0sQZjjkTS1H6g1\nMo9gVBm2EgZ6se58Th8xWua+RlyIEA6TF+epDCoDPkAY6j3qcZjDXnJZc2L4\nPD1/F1FyVN5UpOdrxygLydISCXwutTGwqlPz7zExyPlul8uhps2QF0GZH1eW\noAEkfro/U+7Njg+txf9U3BPOuGtGghv+lGZ8qq30QT+LWgMupGSkb5HTk75p\nJS6o\r\n=d6hN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkixGjVKE7m/GraOjA+TtU4G64Q0C6WrTRUmps3tfAIgIgZOpVp6n4Qp80j4c+PzxGl+F4vyXS4VPf6uLKhccBc9c="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190518212054_1558214751517_0.9542255286932511"},"_hasShrinkwrap":false},"3.0.3-converge.20190518233713":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190518233713","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ba11a042d7d9d4d1a3f60b163cd30de878a0a899","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190518233713","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Frn2a3HTflq1qoZgpRWaC57hQ+SycVCat8jkSg7Z+ov5+CHpcWbxlN0atXHDubRIOLu/e7ijoZwVkv0LgrEttg==","shasum":"b528df42a3101e12a720fb91079d58378c47baa6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190518233713.tgz","fileCount":81,"unpackedSize":6083979,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4JgvCRA9TVsSAnZWagAA7EgP/0O4ikutoIb/zlFqVzy3\nadhir+Dqcq+oPf1txK6/CspJlUyPNZ3lV+ZkzALN3xUlw+rFt1wPxTmmhE4i\ncztV+tuxxbzM9/la+6c6liXYJ/CKVbCQ44iUAAGRWE4q3nLMXy7k2BWgQxjg\nJoiJhUiw1GDbX7RjM8yK8LuwukPVURqarwbtUNuAPX9wpGS+tuLcicxXAXdz\nh/U0XklBMkAbP4VQFibATn7vMh9SHD4ZcD+3DSt9tvHsIjJkOE/B7K/dop+R\nAxXHzlrcle9w9OmwqMaAn3yv25bx/qpbJESsnmDpJ1nDXUnGUZoMR55a9A1T\n32ISHgyIXJlojwgkHu20mSoJmUOFNt8SLEXdQjAA+fpv949m/iXAfwvMq0wV\nwzcKORHFAfEpiOquKMSmcPFgWtvgkw2mguC3r21VQeZu/gJenMx0gI1rbWht\nG5idfCIcERUE7XHIFcpVPnyg0da1NJ//kKH/D4ObEF/0LzMYPG0bB1MRS4+v\ntlP2u8FtUgX+KGKC+Vn/DmOZ4EdJpemiC0qwQzTZRLIaeHC4VB75jSkswHZ3\n7AXvFXlcvfOHa7Qfpd2RGXp4MFNOemrjZDxQh5S8UdaKQXtqv8NgRhd5ZWFk\nWBRUFKvkTAb4EBKKmWNrZZy32c4+BjdjWKo1wXEpFQNj4HE7s51cNknMOAD6\nrA2q\r\n=BDjc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9eajUuNl4BEVl8Bg1rPHw55GD3Easx08RwrX2blDm7AIgQFHe1pl69vL7XOAhciJoYjM0pXliyCYSJhVdNpoCuPA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190518233713_1558222895057_0.9392791103460587"},"_hasShrinkwrap":false},"3.0.3-converge.20190518233608":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190518233608","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ba11a042d7d9d4d1a3f60b163cd30de878a0a899","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190518233608","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-IZ+u3ciqSW3zGCltZOQUXqtjUbIiJyF1/xt9law+kG9ANNxfoM8pY2jNorPzmytkaNiNM96L/uuYCKxLKgM7kg==","shasum":"84bab079c50a3aef2d46d6321fdf52e12369fae7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190518233608.tgz","fileCount":81,"unpackedSize":6083944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4JhaCRA9TVsSAnZWagAAzTYP/A8WD7YtksHoeUYTFQmC\nOHrOobizKLvUbhCe9WCUPknDXw2AF8Sz1Cc6f3M/ATkzPzvQCRLndwc7Y4ma\nQSYgDJcM6ytNEibF4JJ9am3KnBCLnr3nY/to2lR/uZdX/P3gb+2x8Ua09eIZ\nfs73UpImqJE4z6ltAGhPQCxJ4T6U1csBuEb7RWJ0IApNMc80d/lNE0OkPZji\nHfDb8/pD0I3aekz+ZmSZY/Kofxbq0dAn8p7Zc8aenlJUXnx78r+NPs982teP\nga/CukyGbZJjZljDSZ9N8Htoj43FpeunyyIM8ill8NhSCkcwapWgp08Y383w\n0Xmkc6V7mpNs0vGDD1zD2WI1cTe946+qWGVwXd4fz5rLl6C6rp4kGJu/eSlr\nDKWK4+U91veW5JqzaoHurk+8wVaRRv58lSTGlsGrGPgF/s9MGAMpIOc5mTIB\nRqFgVoMOSKY0AEZ1xibPfqSPXkzOWpYwwgjjwhoLsw1DVl3c5DlvqmfQMH5C\nsAbLzGvR97pRhnaLCPXYg23iL2ggHxTp5ifpPHp5wmgrM8jOu5lcJmJvbquW\noWs+p2sh5SVk7SYconKqsZGXR+EZGQZsls9L12+EfTbvosvqa0m0m8q8P8yB\nEe15n6gaVoa68py+JkWIg746vqu72FBUc5Kyj8+QBRbswGYIyGi+TclNETUB\novVu\r\n=EUPV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLP/qQ/2RPloI8ZfBHmXbwYtJTU+FDerV2HWrk1gPpFQIgYbmqkm/MfXNim4o5OiwBNJeWQWqy8zlowzhcscfUnH0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190518233608_1558222937405_0.4836420836649393"},"_hasShrinkwrap":false},"3.0.3-converge.20190518234954":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190518234954","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"de5ad224fafa7eee19ad0136b08acab7a9213018","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190518234954","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-VxKDVo+8rnbMhJLcGw9irDXvoP2VajQB/+Qi0OpvZTvfDYj5PZE9LOM52cgfalZ1g8mp8OgYbHM1DTPGi1HzSw==","shasum":"263401e45d9379c80a79f695d8a4e525166a6cb9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190518234954.tgz","fileCount":81,"unpackedSize":6083958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4JuGCRA9TVsSAnZWagAAXt0P/RXY/Dkml9HTlGriOVKk\nRClwC0E8PmIG97h+6vMdRGuCoO+3k+sjg+oQZiNUzT5b3BwI1m+pIqt7SAO7\nv/LBYghY6Vz6LlzVjeF2C5XO3wYWySfWbIpsOzKeryv1waS/fYWKPmt5YSiA\nW3Bf1co5rWx2+fgLkKvbYkObdlkvoIzxQTns20VRvy18G9yXd+s9DbrcM0We\n3mKpNXn9PmHnBHi5GsXri1uKhkx2cRcBfNoSDyexXH00+m4d2FZFk4/ecWnA\nPoKpFhb5ne2IOiQhPEng0tvEnLf+6rKOK9cePo063uNrRdVx9uPHWptFXl8A\npsw8iEOgb5nH9x8FEbvRWX0udWe2ZI6Z1gLwb8bCZu6U/dWR7dXWdSsLoXY9\nI/iki0ILlan+H0xckleM2XaOYDoBl3NDdP9+N4bmLjkhZQs5ntP7M4K6Oeg4\nXPVFlonZvKwlhZ6YYvgz8T2ZvHPDFHqtykbwogBoqPEIxdhc20U/7GBKmvFD\nSSnvxENmyzSZvK8gvQUqgMwe75eTf+O+Ke65d4QBXUHAK5fy6QU7HTmXSIVa\nddwohYbXLTb5VM9iPS7XWnSpjqA4SETBzVedUxOtuRqxLkh8C1Tr5F8LkV7f\nS1Mm4GHgJDNafe8by/Eqp6bkB/DwGXekVfFRfCvlVH2pYrumdeirhKaWdTUG\n819Y\r\n=ntvn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6sFJoEZ3RbEjVV2FoNz/vj6KOoqnT/ayBw0Tyng3qsAiEA0y7v+Z8UU9nNOh1SbbONAIh+zagxMtSIjdqc+BbKick="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190518234954_1558223750066_0.6412998099720342"},"_hasShrinkwrap":false},"3.0.3-converge.20190520183240":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190520183240","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"586e9e0d3a083b399eeb3ba2cdfb8b6a48528835","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190520183240","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-NUQPuS2DVf2oTYocJqpzwYH5af5Liak/sE3TYQGBL66GrqDwLKdRVbjUIqZYOoHaYoObXtfU83q3fXASxXSkZQ==","shasum":"ed7986053d8b3d81c5fb05d5a3308a81f18cd10c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190520183240.tgz","fileCount":81,"unpackedSize":6085725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4vSMCRA9TVsSAnZWagAAzIMP/35hrvVHA/3c7++TMBih\nbYkEa/CspECMHgbMiCqR6Nb6fu5U0aJ/xEM1/VYb5cRBnvpDOKS+L9XWLvAB\n7lC45MMRHHIccw8ue+iBg9FITTwSk8ahghskI0lV0tuzGMCAAEmGBFgy8Ofx\nVHFGZNteimK/wX/GN5JwVMKnUr6hqTVfMk+nzg0mNNm+Ha9/a1iMVzm7kjNt\nX1BHxs3GwKBtFC35ipKxVSMTSo1z5px5Pm7hcdJeWG2NU+Ps4X34Gm1mMU7x\n8MMhGYcmIib600GpAUy3SPBx88uqtdKluQwLwM6PoHL2R27S2+oyxwaEdE97\ndC0PX1LjmNJBl9EvtE0jVwFBMXtpUdHZBwCzO8CpGCNwKmEQr8SLggpUB51z\nhTusQs5l4cy9PxpjRzf2CBYSlLpuTEDNDQclmbq7868PO5fZ4fWzAjOCNWv7\nKjrB150Si/DopUHR9HCZYxKtyn7SaGybyspyZsH6WfUhrqZlMPjwlM1/uIev\nRk/AVixCmYf/jVfk+B4wEZZzGnLupNuULeDKqQY8XElPP3YF0MZT75ZWCgca\niaUcA7fWDE18gGGtxfwFk42X6sRcH8Wwrm25V3TI/aXzTWnFK4UogEutwuDY\n5aA/0B19wt9LV1n4YGH8Ei8WKsbMoVRHxh3I50fdE/0gXIIZmCz+4HHso92b\nRfau\r\n=/QtZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBEXjRGzVQwHeoUR4ai6nrwUFZiKQnvUzk30IgYlh9QaAiBK8WoRl+aDibAUX7Zd8iiMXLfxfpq6X/ZVwQ08PgHyWA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190520183240_1558377611853_0.15526316064867696"},"_hasShrinkwrap":false},"3.0.3-converge.20190520192749":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190520192749","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5ec642891e03eecccd91fac825b12ec619d01610","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190520192749","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ufpCP4kBnHhh0Fj6t1q8NnWl0oB1NBeE+Fnj1qYV21SOxfC2xrBO4iNDob2dcyCTMiz3ASXgq4uN6yBoaAvfYg==","shasum":"9941bba0d69cebe9b1931b156eee7a9b57815f10","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190520192749.tgz","fileCount":81,"unpackedSize":6085812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4wDRCRA9TVsSAnZWagAAJdEP/2HBOeIuqPgMON5hYEq3\nYvR5OAosRI6qu2TR0axCjCfiZBRX93p6L6+6tA88aOrvGSscFTipWgRwU/0o\nAOxOO8JwEGU0eaL/b2dXIjzsa3IOBWcHuCdMwGKJKtJY7X289brlHgWtoSgC\ndeTN/RVXr9YW0CnrF0hZiB5cosqlAysm6Dp+Ph3c3MJwDUR3W6LXOz7TPt5O\n9chz7xLgwUhFnmEm2YmH2CKtVECZfW6w55rjhN6pzJ3KkrHQ+lvYCs2qNT4l\nNWyy54dAJMswsqqfS0iyLM2PnUpLFctoRDTLdlJmIyujPhLcxvBUEon0FwdY\n+nS5HPuaT7xQFNm76L6bV3CDmTvWwZdT4Ujnzf/BWzYgOZKgTA7ablJDZWRu\nR42Wlyj/xQQlByv1Ftcc9xa3cc/5SorXUhp8/ND6sfwNaCxTCeQjK5RWonw+\nox6fQGyvTtMN1RjDv6rqUV//pvTukC0DjTD8lQZkwTLLC+Lbuj09eateF+xx\ndUC0Jv43W29t/TMmuleYKluKnJTGAJcpcQQHORZABz4vrTY0a4uuwsco7NFJ\nUNuJElAHVs69ubcnNMA9D34K6e76oddNgQbwfgBh4BRxBu2G/02xuFFEqJdB\nizt/vc0+yXKSXgv7nLZA0VnpR7NbWjep+YSbSRfQkIC0AthO6biuYTUIFG05\nKn7f\r\n=AsDM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHE2ewO1j9sztMfsw61gP77olz1pmkqExlVLO0N4XdWnAiAUiWee2tVswWMN7XEpltste34bDd2vH+z4xdvc/IayRg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190520192749_1558380752241_0.20729745485301043"},"_hasShrinkwrap":false},"3.0.3-converge.20190520205007":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190520205007","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ff5d77a6a5839274c5bdf60ee6c2dea5118b0072","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190520205007","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-WeY18Pp4lH+w89bmHUHJ5H2WhRucplvlFu9AS4xYYrBOwnAlOsW/JdJN5l7ricH+xNRDdl275PGA8g63Am/yPA==","shasum":"04cf800e943bd3ec0fa55acd8820814d23894660","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190520205007.tgz","fileCount":81,"unpackedSize":6087007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4xShCRA9TVsSAnZWagAAvIcP/0K4h60YXPWQcRGNq/07\nfUucrq4ND3b8ChJTbAaRWX1Bkial1RmJ5z3ReBTrSfBeVzKk3gh8xAI3Lq73\nk+9gtqUXWWyqg4b7AUrjxPha8Vd84Xc+mlv+FB+Xv58WfJw3paThBS+61dc0\n40Uw5a+PEwZoXVP9zZ87tbPhTraSi3KNsNPxEBOxxeH9rtYG/1pirEZ/IsA9\nqiQUT+9awP5vH020NKJbKDqGcETRk5DG6zS1Nc0lTFTWJycOCVA0eNmTkNbj\nbuCOfA30bzvS89DA5FCMLRxIz8jmVgKC5toNGnARV2viL0cL3Y65zLHIfZx1\nh0A5ewT956YNEiruKXXbrMEzFNT7BQktsrLrOs7kCIgQQu/z9/IjK80b+qDz\nRD5QG/0Pe3xrvo3ZJ3zaiLsc2Xeax8ALQ6LdKE+oFJEoUNq0HxA88kEGUetN\nWkbT3lne77tCpcJPsNchemWAAwMoo3udnzZOdGWivPuChGEJsczYyi/w+OI4\ndBkH8W6WsycWSygVi3gOuTTgFhju37fjh6324OgG7u/qxQup9PvW1Znl3qK8\nYlfA1eAyFcKW+si/t+vamEWL41WW6MIXe33bZDMZiZK+uUVCJSkaM2jnWNSn\noOOCEH5oygyPQZpmWz9mF2O6rM1W4fSecTAcD6zzjsotidz8wEjkEh8tpt0z\nJXeB\r\n=Hi7f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCd89h60ol+/sYh+KyNegT46p9wJKIrFtEFP4vc669kwwIhAN1HuMzzfe5EzJ2nzTy+oVGZ2T9/A0wjfNPqIklgeheA"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190520205007_1558385824847_0.8907422436006776"},"_hasShrinkwrap":false},"3.0.3-converge.20190520205936":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-converge.20190520205936","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b193b4d84ccb341a59ee01dcf2e1dae7a15e1205","_id":"@atomist/sdm-pack-fingerprints@3.0.3-converge.20190520205936","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-QLs0dv+YxilO7+yjdlasd/CF5qINaqHq5NXHdHKTFKkvYbHdXr+jIo8ibfN2CWHkIFTmMkfRNnXtV42oFHcmag==","shasum":"6b09fb8f3b48cef563260f8d73aee82bc9ac93fd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-converge.20190520205936.tgz","fileCount":81,"unpackedSize":6087958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4xZFCRA9TVsSAnZWagAA4lkP/2L+MV+eRKadgoffd5Jm\njlIfE2PbloGP6pUvdqzYIih2n7El6Vu9CytgKNcT7eYC6NUd2ilUa+bZSq78\nvN38dUvo9j3ZrvQrF4wEwcuhd1iIUVTU4yVvNYLLJjFFOFgAnyake/FI09QU\nAeGHHWnLyo0+vx5gdAB7ar502r9xiFVqQMsSI3UTMGtkEFwvgfVqI/uNO3nY\naTrLvRiDXWC77H701BLET0NRurfY9DlAvnnkSjFBPfybKfWtwSt2lgqtl5xd\nQjVnxIjhcbL+mwWtZ/gfmjNK/xBfVEER/DhxhB0vmWGhEUxmCI066pvx0Ml8\nClbuAm5WBP99YWCbpk9ZpJKMvyanmQNIGJIg/n5QLhp/I7eRxgBogLMDUS8S\nnBvRYaUARexWImGT8sXfCgsW9JPO+s1FxJb+yLlmLbc8nE2SkBPLcpYqlY5M\nOxt57caTngScIJnFeByL1H4D8t2OBe08xmXT/ZWvpRzKyjVYdq56G7c0L2sY\nCPsXOlOcQZBjmHYuerlSxXL3tMRY4+aE6sFRcuK0yDv2ltiUm7TLZLJybh8p\n+BiSwG+J2cU6x9315adsYQodU1Y2Q8qTTX3of2f9aatK1MlSuSMDcj9Vrh9e\n1gH45s54BHDbjlj2bKIrwoDuNPBsyten+p9d82NSbSF0GKGf7qQcgtP0HGqa\nnh3W\r\n=wJiS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY/Uo1w2J3u3dHgt912PxS5nYobcjciof7fIg+cUL0ZAIgaHqTz0g3qOuwm/W7DvuIzmxBydeOuC9JMr+B3QayDJY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-converge.20190520205936_1558386244394_0.10659946523148034"},"_hasShrinkwrap":false},"3.0.3-atomic.20190522010328":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190522010328","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"352f0c9d030a970bbad0e10a53b8a24bf5d99306","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190522010328","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-g46QngyXCr25QuAZkb0B+f8vRaCpFtO78X7OZW5oWj50L7bhK5tpSWYCo/+xj1ff/DatTFnn7zZ+Ys4OH9kEmA==","shasum":"d3b19b21d142ec71fda0b20699abc22164b9d103","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190522010328.tgz","fileCount":84,"unpackedSize":6094491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5KERCRA9TVsSAnZWagAAE7QP/2w+ArAvd9fYz1xCrPju\nLEO01hhNCvx099zlTaxfqbjqBAeG9yon2O0YyRLWfUpmCtCcTWS6vzEoYSGP\n8hpkNkkZWGZldfj2+U+JqtUBfx1iuXYlmQiT6htvfcDGhMgWb6XfdG5rfYfK\noEBCDvxT6Av/XU8W+KjdfIe9klVUsZc/N4T4m3bCEErGVgUEJYRnGqfbRWE7\nw2D3SvBNqTSWf0/SLEeog+ioj8s8SWQvYOeTG2IFOzXMn0b1VXWttqtROEKs\nYbJBAwkEE5yDbiIRcIm/IHQpFJabkLRpSyb0ESVvmC9Hjz7Nten5RxA7HBCp\n/jR2nV75CPSc33eyUWCvk7IKukgAuD2cBB4L8AVRWl9Bi3ETwXx01RrXkI7G\nyqjHkjImyrSkagBfACpDLeazJslIL8TGrgTsas0nnb0Ja0ZP+1VlD77qg6bb\npRevT+2X2PZ/BXiVh+JckYot1niEHrpB5J/+r9nkSae+v0TM70rjykhFum17\nRhNhAoUMYKRU/bImGivlG/FDsf56KGP592lvjzKNDiQW3carxvF3urrHAWUU\nV2G8vlppRASiXGqIi0DqBZRVn8m0vSW35Rbp1Jj/41r75K/lNta389g2Yqnr\nL2FxFqO2I9WYJ+NV5D952PG8tBiR9gxBB5XETnakxULaBHUDyAAKz54t5jdt\n4l2X\r\n=3cDI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGYbajrJLct5iYjSykWtc8AIz+pugSNwjCfsaXlW1sRAIhAK/uwsx5Gd+WtrvNK+zGl4v2hsUiE1MH1MdaNThDs89E"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190522010328_1558487312883_0.4644258524687226"},"_hasShrinkwrap":false},"3.0.3-atomic.20190522185956":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190522185956","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0000f1fc873fc9130ce4c5e3f2bae3c1155ebb95","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190522185956","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9K9634vXppeMXX4toPXDky4tvYuqMDBSeCqsFHkHOeou9QarcDD6wpby9DXY3ic9BPoDjDAsTEvyODBqmi02VQ==","shasum":"b91a00465e895f7f7d11d1f49d7923bb75d6f39d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190522185956.tgz","fileCount":90,"unpackedSize":6097757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5Z4ECRA9TVsSAnZWagAA0RUQAIwuCOrUynh72DmbhSDz\nPq3oLBn9ngdgJX3Ijp2t1PEhiU81EQXMx9XOSnlUbUDNQNGsoky0q3Ydg2aU\nuzvT0gNfNkX9OT87NzEZXPfIHK2cf5gRC/fsjE2PY4Na/lV4MugSinbveImV\npTPiyoB9hyctNzDzz/V74X+ed7DfPSRVcyY14f6CsVYCjenwNqBzulpGhA+L\ns3ft7smLemowMTdszJfxOryH+29lZIC7CeOQXZtFjvCjAVwhYXnUYbJqd2//\nKShuNF6XCqJsgvwB3ljg6GefL7NibT+udPcXXytvcE89U2cq5j5cTUF0DOqE\ndhUA3jb67BpgMSL0NvC+zyJKvAZBxY8K8KF0DWU1LxnzWTtmX7gT5y04ajFd\niFKmbrek4phVSVEpoQqvBNxCVB/llxlUlKnKXt+EFI1eA5YBiIgM7td90ywz\nUKguCcu+9pHsmDVV9Iosv5VMYHycJHUZBiR5P3KlnBeZi9539R+tIoeNu+2q\nPUHr/EM3ZlDpYjca6vQoiGLL93v5otIQsfz78KpVw61Aznknef3Eb8TTmBIY\n0JUg5Qb+s9ERVQUQs5hTLiLLLOMzEX6SNFtr2cU0IK5n9AUb2p3JesmnCvel\nhJg6ypj0um9nbY7Rt6RIwsHRQE3EEo3mVBQjxwxHKUVEvsV6ThPgDTPbIkCy\nU5dk\r\n=eztI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/W+1rktREO1ikzdFN3DJqE1an7cooGtvmmQvRUC7jLwIhAMS3EXy+tNcRb/qQXIfIX+zuWAX6VTKtDPboLgxWBc4Z"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190522185956_1558552067180_0.5223537403077758"},"_hasShrinkwrap":false},"3.0.3-atomic.20190522194334":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190522194334","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ec40d009f667690d9a38012cfa5c4ec8653225e5","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190522194334","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7rPIEOEjk0eWlacfOVNLzYRX1Iuooh1LQQAK5xqrE27zVBxWc6yIomQZt2WGI2fAxo2zdWYDAD1KtIGJoaVwGA==","shasum":"3cb63b53205cdf810e5af978b2824de2562eb059","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190522194334.tgz","fileCount":90,"unpackedSize":6098727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5agKCRA9TVsSAnZWagAAHw8P/1C9U/cg/LvxPKvl/dG1\n1FPebYLugwiM44ON25joa9vt2LlkmtiUyKYMXJQj5SN4dIUA9Ee9s2LWof5q\n2N/FIC7X++wxeYjoKxzwpgzejkB7BF7EMg0AGhqaWgM54cH2G7RjPz2SKvQE\nNSBYs0X0pAX06N7+dI1XNM1AGSAH/7FowkxPeT2M5Od8Qr3ZYjxCUbL9b5Nr\nnSsJ9yrn3TyvpNrw7dy4sxhLbcqWXWPDMd18rqhF+yTAAtGtoHwDUbMLECqG\nfLjZaWkcCNUfn7wXwCzUzPPsamwYfbklfRZyfhz2WHiTWKJXM9jhKZZ/uHEi\nWE5uYLJKne8hk7NAu1mvlZ2HhWMQcooOyJfI9zu5FkoGMhJBqnhPwfVVZmAO\n5IYh8eMso3BXONl4J+1eqbkbwnFCTcZCSUJsOavIdl+WYgzqUO/EfSNVFwxH\nRZFaF1IheY6xuoRuXHB2gtais0/OL7i1osbwJqa1QD5qJpKneszWyqkHm0DF\nzlETblVBiuSjUFsFFla1d1dpSKa4gI9K5BWZETXl3rRAPMxKZhpZNzvFO+Ig\nKKHMvfPu9MU0yGnDbmnqwXfSL9fYkL7QIrPl49V9RBl9/Bs73nD09sZCe3tN\nkLdRpmF5Dwfbe8XMtQM9blTbei8b6i7568vbFyiuA6AhntFZStTomOffaurx\n4xct\r\n=2/bw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwHYQl0Glk/tFv4TOvUrNEjWaUn7XRnkn/n0tlXvkxuAIgDqr8aaEG14Ha8epKmsCXA+7vNytmEVJaY8qWli/8DTQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190522194334_1558554634286_0.7295990698779207"},"_hasShrinkwrap":false},"3.0.3-atomic.20190523022516":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190523022516","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bfca469f3442ab3f2952395deaeb43f78c3cebca","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190523022516","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-MbDMwU6Fd0qpw5aQNM9iJ8l2Mynno1S/KawKJIzJwud5izE5uoSwdQQNdTKFDUj5FP4aekv7YnXpKKqQdHmtzQ==","shasum":"f229631bf1f4ff5ae091890be885029e04d93675","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190523022516.tgz","fileCount":90,"unpackedSize":6099278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5gX4CRA9TVsSAnZWagAA64EQAJF6qhVStkM5OEA2STKE\nLmRS8rlXxn9H5r8MNmWhOCbNsYLMEgh2xseJ7l3+5B7ELeY/najBgnBEz7pY\nfdbGTdG4oFW0Rmu/7CqzXILjEJEVsNEfkEUY9z6IFdmJBieLOHWAdNyAsiXJ\n48l7a7ukEx0GL7IsmhYXznwmKi0AWnzHoHIaIoCYIwJYuR8xSCR7DXfsA9Qi\nLlAaMXuyxRtOomqwJG4nrihkEoHdWVqa3HAR7qkuH6ZgKAQbg8yWl7HpBN+j\n8YbqdFrrrtoV3D8vt6QzHW6KBmykYwWt7EDctBssRv9m93YN0wak5NOvuJ0G\nrgCIT61TPClbeshYQE2D2q4BW0oU6L73zjf3mQxl66hQT5XK5r5qpAhCZaZO\n32XmeK7dcfYTjsSbDsVPMBrO4fINyL2uNskUESGvJfN8R/6i17Ta2OTSBGzN\njUpNMES0eNxflxCtN8COb/HdGc6m/LzFDj7yBOVxvjFmqI9JXlMBgkYu2mBr\nHeTamOHvcMToFKxu9lL9fs85yERjYb1wjsSDHv01C5kg4uI1VXN5cDODFz6H\n87JbHRA50AONkVaY/7jQ9z5IOabGpRz/TawDBgq+1pFsYwQtR59AlAjG7Uic\njl03efg1Onnr4KoPwZUumqdez9ZkaW2DuFoOUdyy4xW6947A1KSwbnQDIpFF\nNrFx\r\n=ND+i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC64ZqvV+oQvLlSz7DQblYKBekm/rEf9Va2+egsKoNKUgIhAIyFcklFZZiNBbrgg01LiF0128PwxC4e5hf1yV8TU5Zq"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190523022516_1558578680123_0.18600553057942104"},"_hasShrinkwrap":false},"3.0.3-master.20190523074904":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-master.20190523074904","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a4857e7b69d48783e178d065eb624074dc8c4b4a","_id":"@atomist/sdm-pack-fingerprints@3.0.3-master.20190523074904","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ktLuynjEJ9CHtGDA/IRqHX95AQO0zK/rhiBngTFkkDYCxKRT0B3HTb/sLOYmfov8t3/p9faY8m3wjSDTF19piw==","shasum":"3327cae6b197eb1fffa61dd20d6973b874ee2562","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-master.20190523074904.tgz","fileCount":81,"unpackedSize":6133091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5lGuCRA9TVsSAnZWagAA7vEP/iKAJybuFHjF2H7+8udi\n+FqIFXAm5hbVNYmGvBFiz/8e0vcSbBvWFqWMk1PTAsTecP669rjVAww0hm1o\nULkTHCZdqy5AqmXztJ5fDg+Ijkr+OhYqWpAwxMaBEtsrGdMcP6ky0UhR5ZCU\n6zp38Eu+y/HctcdhKkvKqixlJgM/zyz1ypHSr7esqu2tWmaiTR4jj3Uyvmy/\nEjMflis5CYiCvc8MtJG5uGOiILNMkB4YMmM8/RbZRz4jtccLh3dnQ4ACax1b\nMDOKE6SjtaKmA8PqVdpEbdUIoTT3JAiXPCXrY3BryjAoCkCt/FHybGnT1Ij7\noSdWkk4iuhVhEZnNgIZ6oNvJ3VRya6ESlt3Cbl2LS5gOVmuPJbcfpgcntp2y\nCvqWv01jqzDIWorOqSOWceu3+bys+hnZv8egKaPfa3Ywaa+UwcFlblz3ZiG0\nvPhnVk13SIPvO3DVgLXuPc1RzQhMHkOr/KHrIRGJaNm6l+MSVPJEGlETiFK0\nI1mDpplEsflUgxRKbTKkUgV+3EVnRYIhR2yqKjWz84kbDtlQWH5xMTnno5Uj\neT6EOy6KFIoEhWUMttI5dfwHYPyV69P7tTbNxVR62u2jYbQ6PgfsJdDLkyPC\ncdr9RdirA8/Vd1bpI56EhuX8XO9I4u8I21NgB6Osa154Wgc6VMR/XhnJPvUC\nJ5t5\r\n=EcNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQI5NsADYZQ9zPMuU4nioTv2utmo7yuO8hL6sLV/kQoQIgeXxlJitrEyvGBL/rxWRF2xvfi1xQuQgcvPxgMzUMFSQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-master.20190523074904_1558598061678_0.9937718817931709"},"_hasShrinkwrap":false},"3.0.3":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"af7d5974d5dbb73a278557f7bdd996276962a4e9","_id":"@atomist/sdm-pack-fingerprints@3.0.3","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-2RII/PbJ12kIfDlx9Q6giMIq53lu4Q9jM4C6POvTqpf1LEJpW0yEQvqa5t6xTpdRN14ObO23uEqpNHTkuElKwg==","shasum":"7f77e9f50afc0e5d0b180bdb69f6e0097274bb2e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3.tgz","fileCount":81,"unpackedSize":6133069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5rraCRA9TVsSAnZWagAA2AYP/16cySzx4Ar4k/5uKhYM\nYQ/hTAJYljUNv5nzZTQ6cUibqI7byMGlr/RhwOEybroeuO6l0wQ8V2x9qGCA\n1lL/76bZqDqY0ux7vBVQC40+GX143j01ROhDazN6ARRtPfEwL27UAzeJieUB\nSqYMjxaUdTPFCqocFMYQmSkB8v9K8RsjIT4deBbZdWRqMwloU8aTfFi5Wau4\nVYGkfdhInwCywlwbAddFWcGvrd2vHZhmrbM4vPIxHi7sQz4edMkQeAt4zSDB\nZ+xzdXsEKH+gKO8xzuWs4IaxJLHFqx7/WoXf1zAlMEBFe/ejlWSvE+I+9NRH\n6m1WbSmWrHHtWTNTq4HYwrJZiSVXRXbVrlz1Q7mWCPVt6WTJIeZo+UCb4GRp\ncRhWZ6myL237hBqxCTzKQ037HFqvZ8Hc0jy3hop9lESwsefMwXUIqDzxYWZV\nVL+VSi18sAyTbk/TE40xGO9hwYJUQwUQVgwog8nqUZNUwxS2cKMwo4jJ6uvP\n8Sw5pEdF/UZMzTitgON6KimPU4XzBjqZbLXILhG5bKW8WHtgiIr6R24+RTJc\nYpSBZid89AyhyhkfeNOf3E7w7HetLSsOAvUPFud62ec+Qg49Nesn9hILGLB3\nyCR65JdRD22DD6Giz8J6o6ul6167Y8hUE3pB56/ETQ6EFeorJsrSBtn+FFLQ\nDtJw\r\n=ecu3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/Vaq7ZYzfNATDVQjyDh9HQuh9XmiqQr3TRiNREM9DaQIhAJ56hb9+hFrh7CHOcB3+HqUlpNrUk6UtZBsG0XM9KZG1"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3_1558624985883_0.9492147414144096"},"_hasShrinkwrap":false},"3.0.3-atomic.20190523170331":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190523170331","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"662b5efb1a94d5939ef937902798bd2e1d67b5b8","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190523170331","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-U0fqkYN4cLoTUQQYz74j+ZcoQz9tOCA6Q4NNBD64bOYqLxBZnP8Snkz9vJhdjbfaXoXgdL1RkIoy7CHo0zqm5g==","shasum":"914c072481a39ba84b2bc35f759b4ba000e25b98","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190523170331.tgz","fileCount":90,"unpackedSize":6099749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5tOqCRA9TVsSAnZWagAAI8IP/3xYyz1kmmGvnYGMAkwx\nm409w90R61V6OTOWOh0w72aFZZc1qfDAlvN2dH7OP35IPxG4teTAsMJjZqdP\nG3dn6cGnjLMnZCho6c8esTJzTwNmA7SPChLQmegkT7s8trRhaW3lQxiEMKvI\nBxzrPwMsNPypSzpNsmV1YK47XvUFE+6FlreZ4S7trCVoJU+m6IYjF5sMsTYt\nicJ8BUj9ZN7+P4TeiNZ4CLLQJ5lq+iasnDYvQdaK30hg2TSSlUb9uEfNKkpr\nbmNbiqzKTukmfJT6tnuJPkziRdWXaG24FW4UyPrR4OBebz4lVn6RzV0E5cYX\nRHD9bdt9BlXGutr7iKacvgvGdymQVcYOx4lFcu0p7kGbTWL5kSQ/+hXus/j2\nzAef0yf7Hn8JIwflQ5hZEpxDWP77x+YEfgVVg3k8qAqGqZJq7wJGJgKbxx0Z\n+RtqNzhbEm0PbFTNdltGXpH8Chjz777rAUMUMsYXj7RXe4hVK4L+HBTeZyu7\neCcavoeVeNinWxRbTdguP19k8SNr9TVt8f40EtKHTWRhLmrT+qqRVttKl7Cu\nHMNCCUjsmhLxQD/6ysTyyDNkGlBX4D4hKG+4DuOtJGnT2Y6e6XW/jXp60MZ4\nY1dxw8yqkSCj4Ij3BgVilTi41vnKj3CAB0zpjfbOAuqW3DsiwHpgeDSbswne\nqx82\r\n=285C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7TMBFNCDuHG9fvQBg+2H9aBcUCyWbPFvw6V2c8QP3KgIhAO2p5gDYlDtTk+XbTco6grU/c+Zl5T0hVJWV4SUgDiIv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190523170331_1558631337496_0.9168929748037387"},"_hasShrinkwrap":false},"3.0.3-atomic.20190523171149":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.3-atomic.20190523171149","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dd37c4d16d1a93ba344861c53ccbecb5c7a781e4","_id":"@atomist/sdm-pack-fingerprints@3.0.3-atomic.20190523171149","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-44vTlobrNWjz5hZ9M2w1B7WrSiZFoNNNRQc5ORyumHL+rHkKYdQXcoK9AQdldYLqkipGfPHM/Qpl98tlfPoKFg==","shasum":"29f7e8a4ff45bb4a6c8f0a27b54535f688c1523f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.3-atomic.20190523171149.tgz","fileCount":90,"unpackedSize":6099510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5tW0CRA9TVsSAnZWagAAH7cP/Rt38KoT+iHjMo90xaYP\nTTD9+tlKup/EP4J/a33Ii6+OKjYT/+mytZgRF3orfcPhAGe0aolpiYHdEgee\nrbSDMcr3i+iSfETdPuHytmVDuVCLrMqLRvqGqMO4KkIxWsca/00ZZy/2hq50\nzsDuhlAxTjL9d/c+3F1brjr0fVpiqglbjScHPz7UR8YVBbm8x/lkG+o7rzre\n7Z+PubXO6yO+XeK52wTUMzQp+qVkXgUByTaiocEoxtKkRH7IWuxKquYcVb8m\nfOjI2dofP0jpvKOL3hBm+Yz7MCefLYWqg2OoDtRlxNy5t4OaHdx6/2Ylp2RM\neBZlKIJ7pTcjTqIYyl86iro2nZQeWYCIfRCf3VJ6Mj3d5jlD0AOMxmqxcBSu\nj3nrmm8Tlmw8Kvt0q/mmJP8l7/6Wl4QzGJqWTHFGZl7PLHo7zAjs5FJdhzsE\nQyStbdMuZGoEGAxw/YKGPuIb7F4qKHT6HVjTREZ/AkT/cC7YMYL2qCPxpHsO\n59fyWbFWc0U0E8RwhGB5If7gSJedQLKL6LTu2uLFaITqfK+ZvIYuzYFlBR3g\nXjRpsERkhUSEJ3KEMD4OVP+awjwzepopF6wwgX1VuAAUZpp/ZvMPrrqDVKl0\nFIoFBs9wUEFIRhQ72pMwsuYP9pkrWMNgo4H1i6+m/7Scpw1XmN9ojJVBPIfG\nbjsa\r\n=ktVn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGflNLdSEqCzFVb1xXj462B5mUscJuv/dXHEn8BFqJgsAiEA2ohhqYX/cFTR0pPKB7VlFfOd7w+ZOP82Zqb2zIcOaYk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.3-atomic.20190523171149_1558631859846_0.7683907843015909"},"_hasShrinkwrap":false},"3.0.4-master.20190523211118":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-master.20190523211118","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"da508d2ba090c486b374c89549650ad827a6f3d0","_id":"@atomist/sdm-pack-fingerprints@3.0.4-master.20190523211118","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-YhKGNfvPSF4m4uNLbJKMxQuzTFIVhmH3Y5h1bUzWAKBixkA/ei+KseXbbeYDmOA5eAloiH4Jl724HzoiVOA8Bw==","shasum":"9f693bde1f8a4ccf9eab75f5fc8a3a78063346f1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-master.20190523211118.tgz","fileCount":90,"unpackedSize":6099924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5w3xCRA9TVsSAnZWagAAbloQAID+MdWzm00KBbGIBdI7\nNrMPmsMkZZzzXcEqy6dzAamp7KpNtQppPGVEhWL00ZT+T/WEglx0qaTCTDOF\nb2mrnG/OkO2J0+iPrbwGqNdxYbIfQhHX53deF/xr/mYLMvQNFlF2xduALtLv\n4ETl1fnlKfstXJBvLfXtpRDolJBI38ZmIlAplFpGkz5dQ8N9l6sbBdx77rrz\nmPpXM1XqhMb4cbJm/2Kt4dB1IHAvwNQEJ7fZu/mK/SSpqcFTCLANB0ntsQU4\ni/4g5iyStRyTM/y44TWJLfzaDZPI7UR+w7N5g42kJFGmZIXsBEggQhzhkCdu\nQdJ90lDhKQzFL8SJailiW38HVQF1UCK1nrKdqNq0ejLbybYzhXTbnwszQPRd\nyMQYLszm2ax6vVWTQQUucLg/JrF4OU6XM5W0X/lTFN9hCMaWLe0Duut+3BX6\nVUbaVv2qOIrbYLxd2pG2On/Bcw0YJR+Y2L/jNEJshjEpNJ1cKWDYu2BhXF2s\nJdPtWtNTBjim9JT4ma9N3Q8mCNu0qV0B6qpOBnumszTE5cV8eeaG8tlcCEJP\nqBKO+8r+AvpMeoS3aCIEYxPQqn2GCA59W6KE8FajFqHt2LpslXr86fnlgouU\nDxppjX/6liOKRPqzNok3s6ghTfE5TzVDWxcwe/Fdx8s8SvEGibclz/m1XZ2P\nbE0X\r\n=y7df\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCepdordhTWWL90VqjDzKW10ipAhZFw0mQwYC7llmYKJAIgOXXULpY0bP+Ov8us6odfIUNVVUqSUAqXmpqeFOpCzrc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-master.20190523211118_1558646256926_0.28377030967769556"},"_hasShrinkwrap":false},"3.0.4-master.20190523230150":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-master.20190523230150","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:cljs compile:ts test lint doc","clean":"npm-run-all clean:compile clean:cljs clean:doc clean:run","compile":"npm-run-all gql:gen compile:cljs compile:ts","compile:cljs":"lein cljsbuild once prod","test:cljs":"lein doo node unit-tests once","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:cljs:build.js":"rimraf fingerprints/main.js","clean:cljs:lein":"lein clean","clean:cljs":"npm-run-all clean:cljs:lein clean:cljs:build.js","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4f1648b96b4dd1e5982aba0b90e419f06bf4785a","_id":"@atomist/sdm-pack-fingerprints@3.0.4-master.20190523230150","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-MC+pPFC3Zb/pbw8NifL080gbxIzN5bL6h+sqyq09riRCNJewuwZiwI6ijcDsD21/kxTKw//i0UR9co86vmJWrA==","shasum":"4a5a61004b76e0594fc5cefa8dbc858b4456de68","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-master.20190523230150.tgz","fileCount":90,"unpackedSize":6102375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5yfTCRA9TVsSAnZWagAA9a0P/0YXTZKV/MCM1vUBZwDK\nUUnYtYqBw5FxiFSoSchq/65I0jm2EzE90Jtt248XD9RWmvUZoBF6RdADP5hX\n8NMS/UfehCU08OJgE0lVWDdnrQFk7MYq5uZdqcIyqcMuG724KaTgOLy8kt3/\n3mQKAlSHownGPGdXX9349lpMdkm7bt+3XhQDw5wh/oF0hcyrgfwI1Gz5V2vh\n1lzn6Oz2ynXCJeTZeRu3TYQBBlC/27ZNrKz7XYwT6DjN58jItptTw19D/UHv\nZa1bS/JKtGTa7JeR8/NYYiZWfNGm5VeZmLqfynjVDmzJVLVT1wBhdcvA275/\nb/X1bgkfq7IJ1pPknJSUmbCjsZAATmxQyOSG89b/0KTE3LqI6UOJDV6Gz5ii\nJSFc4CeqkU0eatPWJDgbevoW4crUcVxwlyiDsmtenJFmy62sV/QDLyUyjG8t\nagJkFaL5XGzBDl18h2QGVrwLd5CBcPywRSBA4rjDlhzJ+TJqgNSNxcz4wpFC\nkGW0NRzUwBQlpQGPMRLusjheRaKEaw+rFxORQFc/ouuUBq82BCVdIywDKJAz\nCyabFDdAHyYZeKfuoaMoB0AWTIQrdUrLwIHhN9sOBbLobK9Qh+hF+vKibU1z\npHGAB/9gFCN5Xf2b4SI1dxXP3ca2LqRP4EMWfifOxUq6C4n6JwN0dh0gDVL9\nuRR9\r\n=Q6TP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6vTyMz+WcwXaH1GWyf3vcWm3g3s+5qRPyu1RKeMn1WQIgDC8V7w5DV5uFRyFYLF6HRDUv6YcAJWF71XUOv7O22pc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-master.20190523230150_1558652883243_0.8981469858366458"},"_hasShrinkwrap":false},"3.0.4-master.20190528055121":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-master.20190528055121","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.4","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf build dist git-info.json \"index.{d.ts,js*}\" \"{lib,test}/**/*.{d.ts,js*}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"166c545aa2ca3081c8692b615d9eb384683742d9","_id":"@atomist/sdm-pack-fingerprints@3.0.4-master.20190528055121","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JzkmlXdPyrL2Rm7+Hw889zbu3+Yc+71D5OYAm+pPZC3+CoyhNKKOC+/e2WxvYteFqZxVbXti1SYI2OJd0KlbMg==","shasum":"9a2ee5a12a50ec11fc68173e12b858989b7fd525","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-master.20190528055121.tgz","fileCount":86,"unpackedSize":1985613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7M0ACRA9TVsSAnZWagAACAUP/1LTwm3Ns2h0bnIfSJTw\n0+4cDN7S2U8r8UdxmnYXBCj9bEpxKYhwLg1TvXqszh7/mFSRntD1sScZQSTF\n52Ifngx+EoHjWKbcwPulsybT9yqHCeZOkQN7YtzVmz7sNycBMFrXWAwlsngh\n4jm/uadhAHTCEBmxO/xXjOqSRu4esHKrAPC8seMNdBvbCSBacYVC4gzGLlC8\nKV1V+ONLBr9iUFsV7aBpLThVbTJE1u1BxygPCjz0Kw9znwlws8VEiXzHCwBR\nkUq1J4p4S7Hqgt6L/0uS01EqgJIqBnzi+KsQ/hDuZ6dVHWsNbNVS7BRQv1JN\nazYJTjl/Nz6mKdoYqmQPjhLVJ7JvLxUpa23sSluhUfUAgoM4mFlMx40K0Usl\nL09BGQkYP3b890MiLL/8/0YNvTGoQRWRI/+bBKyMZgIitNF3bVKFXFFSFbht\n957RHJhgEPYGJ7cnu3OUDaQcgNncajCFSaUapdQCgA20sRHP3PT6YT5RJgjV\nxoGlDoAg6K/R79gnRFbWPStOXaBXhBVyFK6VOlBLPHbo645tWNSZKm22eChw\nodWyXJ3TlEPGpvulKptDxYZbKXZ7CMYNGp+XxToEkTfemD1NgGRmty45GRgA\ncl46qAt5rTjsue56iD8oj9FdzOgHoDnwSta7pkU3t4dRlEKJFkJAjpua9DiX\nJB3f\r\n=LcLf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+NJL4WDMSFEUZ1CdvXZVycEMQB/hRLt72zYmDKUyOMQIhAMumSGYdhwz7HPZh6CasKqnadICFzMgLa9UcvqcgtEvY"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-master.20190528055121_1559022847966_0.6220422514477439"},"_hasShrinkwrap":false},"3.0.4-master.20190528060120":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-master.20190528060120","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.4","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8bcac3f42729dccab281ccbd8f8938a48251ff97","_id":"@atomist/sdm-pack-fingerprints@3.0.4-master.20190528060120","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-d3mhKXAooMNX5l/WCq+UiI9p4WQPACB6Wh2s5UvqyjHpBIjQb2EV0PiHK0oDEv0T3k6y+6HZkYaEBlGcmqU33w==","shasum":"49b300425115cd5553c4be2df104e30fbfbbb73a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-master.20190528060120.tgz","fileCount":86,"unpackedSize":1985620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7M7/CRA9TVsSAnZWagAAvN4P/0SO99IVaqeL/I06R6Qd\nlkMLpZleW6hHYoWPbo1YrO92zbQfpeN9n6w0Kq+63fZj1NNvP4UMWgNMERxD\nB2Cuo6leRwrNdnVsnKkGEws2bqZdMVGsawK2Y2oEIMjvZ/DBRVX4JqqGCC7j\nhJd3P7njc4MjRKMfxhLIZ9AT4+nD568Juy2WEk53KnVsXS4y84LEL8Gi+8Nv\n5Qrboqknv5qAaEe5fAF88xzrRSArizSHFmOiwWk3opsfo5JqcFSzxRTLtE1R\niaiRiYHgGURvz04ihu0nWydSbexM0OXk/nxV3ag4NpodJjCxRxVToArf5OtH\n65YcbChJnV7wwuk6diUT1ZAKv6geUpB8oFQPQSWZ2aR2dQfbLifYP4Hjdlis\niKKL2j8POQZLnshFtRpwblUTjFVWFmsqUsAocVgYsbFZ2ZZB9X0pRaXXYu/J\nTApgZo3J944Ikisnu8nyDrJPQAr5RSHUjs4ZpVBVbYY7cHmi8r3Bpocr3xgJ\n0DNynMJ97v/dwhv0f5iXn+2/h6eCA3LH3e05eax0+X5WIwL0+1v5o7Jon1N7\nZLsc1Mb/Z0vM2cDbfruyDJVuZMTWXSd9bgu6Cd5pwb2/n9WbtwB7vyIFycUp\nDbG/GuWPinZf2YisV0aIehojZ987cXdc4CLrVmPdNV1Wfffhf4edadoUgyBc\n47kc\r\n=UUDr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsDxGIG6QD286wNsspl39wLdnjqZBoP4uhGNEUFSNF6wIgMcMNG6klOl+trP6BEguiQlFZ4FFnajG/9SDPX57aNAs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-master.20190528060120_1559023358772_0.9966856241010782"},"_hasShrinkwrap":false},"3.0.4-master.20190529030444":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-master.20190529030444","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"467c08f331c08053e43d69b6ed9b202e84eb09b8","_id":"@atomist/sdm-pack-fingerprints@3.0.4-master.20190529030444","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-p15+8NO1KKYxALt3UecMW7IHdVMPisUYrJ07zcoEk/nAdW24sLGIPRs2Jm61UD2QYFxCCyIj6HHCW+s5odf4pQ==","shasum":"6124b37c8f8c7c69a518f1a6129a8e913b802151","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-master.20190529030444.tgz","fileCount":91,"unpackedSize":1986002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7fcZCRA9TVsSAnZWagAAEPwP/juepQren1CcaqPWMhV0\nRnFu2jqz/mJKUWe0is99o6cPhbHlyA9gv9/ZWP316MvclBVPrt034kDNqJiu\nyVp8kdMVxbSPXtvC7+0lESHBmVwz4UTJB3sGKJMYfvUf0cmCeNZaNlaCEd2r\n/9cVipg/+CcElcI4hFpwx4ah5riwF7ZDuWKlT37yaoLccPmw+CUx0ATSdcd7\nVvQxt6YSnMxhidNgo+ZVbCS722VoexPP5jDnkUcfqcFqFAmMClWSppyMT4Wi\n/bKz+ZpM3lbSHVP3RXfGSO/iamXTxsg+s9hhTb0wrtWE+rZfjm6qJY559Odm\nQfz1jQXYTbtiUF5oBk+69LMsuGKc1BbYQeUFphuV7qPkVZqYyhHeHc4qHeT5\nliJebpj4BFmURE2bTNMur3TyCD25NRjs1CPOsDOxDfGKslzr9S1uRVV3C2iU\nZhwcKDOevNJW+uq6Jgtz8s2YlcOVW4ZEPOgHdHlcf6EfELE+JDHocveW482P\nfs4FjfBjznciMDAPqnJ26ywcdWVghGgBbPFfayDB3vhbh8H73a8WnfDPmIjF\nvAhHJE1f3nnJPfziq4alssotBEwOuVNV65t3fgv0KfxlDBLbkJQ5xW5IKSJk\n+UpnzPPdTzrLX0NNLOK0lmkcZ4cxW1mtqHOtv5jqoKCQVNbFEeZjKDqEYyub\nQISM\r\n=dbhV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHP4T/s2FuSppnAO2lILH9s3uaYh53JiPxiroLaSsI6AiEAuxW+U+nmaBjIqE6KZ2grlvuDpXglVgm1qacw3IbFhUA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-master.20190529030444_1559099160250_0.9512626385455858"},"_hasShrinkwrap":false},"3.0.4":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"eaf1a188f0962b5b4103940333490416ac7b091f","_id":"@atomist/sdm-pack-fingerprints@3.0.4","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-P3y5qNMXPImH50g2T3QPm7yvpGPBdG/Yrcvp7mpWzbg12D1oUzpRfpEmhiK9dtg2sJmp/OXZogkcSiIRZgpqxw==","shasum":"16ab97d42dcb5417b7cdbdfbc576218f9750643f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4.tgz","fileCount":91,"unpackedSize":1985980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7fhVCRA9TVsSAnZWagAAZE0P/3z0DuPb5jX5TXZzUwwI\n55Fkiu55cn75Dt1X2NFiRWHTN94Y5ZiaOWqksnliXZcwwKdCgw6M8pGlbxC5\nY8KTUk2U0HD7GxP6BQcMsknuqQz/l3WgYpyJlXjZvTpfTyMvw/+fjxsTY7NS\nOmudsBY4tpASpQsWc+/fjSDnkf0SOaSqUZCq+FaCLB+k9DBc+G2z12IjawLl\nsogmTg35nKdA4gsyUsA5uaOQO2NoroNALM9ZMJ3gND+yJO+uOJH/Nj25Eoxc\ncXvIDcyLGYn+IpiYmbRoFpK+jx7faos3jMw64+dkOZqhNFQvjOMYj3eYVK11\nslEu0JeGYTKHapBYP7/zcCFFlFzyqaWi4kpt7eHsx539nb2aDpVaAJmKYBBV\nF25mxnFY6Gp9BdCjngKrf2FT2epqfDIKsGBeflks6Gf2X5B1uqAQVa8dB0Gk\nIcCbJsm617UK4wESXNvkvgAxYS3KZXP1IHj5O3jTUopExy16GAWFgyqxhOZV\n5OCl1Bf6sGjbBYnbMqfovzfh8kVzTH71z6GqCxuhIosmGkNAU51b/H6rgUhE\n6fRqobWeaj4ZkjxamwWD+Pz/GgsU383825eZ1ZvYBaUTbxq78s+QlGOC0z1n\nZb5N13oVRZ5MtHy777RShCin2R595Ax7IMsXq0oGDkjmFmWQNsWBUIQknxJq\nDWci\r\n=aBXK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCthCJj4jWl3s+3KfWMiQVjsp/Gk+PMqolTnpscmgm03wIgWgfl3WB9bMonsRNt0Qv/jI02TfKH4LdtqmYPwbOPkhc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4_1559099476272_0.8800953188111464"},"_hasShrinkwrap":false},"3.0.4-v3fingerprint.20190602045744":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-v3fingerprint.20190602045744","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4081e95df373a3219fa1e359e54b158b9bc4eed7","_id":"@atomist/sdm-pack-fingerprints@3.0.4-v3fingerprint.20190602045744","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-MCYQn/v25Tu7OgL4CeyOhGY39wy838WArB0YU9v9bkKkLHS2v99mFTPM2qSc25ZKPnU1MD1mcfmw/uVXzPlR9w==","shasum":"b9daba1b61cbad5e009d36dfa8c059eeda8db261","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-v3fingerprint.20190602045744.tgz","fileCount":91,"unpackedSize":1993223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc81eVCRA9TVsSAnZWagAAluwP/iFOkt8VaneeogrQbZ7d\nnyS707iimiCFSWCgsU5G/Pv4z2s+uJfvLJ/QM4MkFEHXHctS2rae2BEbx8U3\naWevXxndrkf3afuiPEfaq/NWTmxeA77+vSZu8LJMg+eElOAbxESh1lk40FOO\nH7+WtQ8lOpm5aQzfPF3pNhe3j/oSDwlELLDv6bomYF2QJqrOZOj4JoHVdcfp\nBEOW6YZ3WMLMPEE8XbqJXpprkTsU0ico2r6cOp3SJ7w2U9CT+uRXZbF4qXrv\nWoJ7emblsD/Jy/RKM6G3WpFC6Aq1CLb+besiz18VCbJ4V2OE+SDNAmIiC3Jj\nXmKlJa6E8c+rDMb166gXkYS80CY1CYnwJENPVg0RrpiIH9LIDCkJAeNWp3fI\nHL23NhiK3H2nGZ7J3LmfdgVfxlQ1wcrCwWFc2Ws3+QOebRxOy7AVllDB6Xdd\nCKdep8nAdzXmkalHgDYb70QCj1CI0Ejo+Nu38SCiN6N1XbwcEXHWHJCiJhTd\nJNVL/d1dJe4omXCJYWSLqss7rrwK3cozHzwCa5Z3X8BG2fkv8Z8mMgcT080B\nukjQZvWcakkpVZsNhgsSrlfSZTWz8Pav+ORJqlCeEtz6TYgAqKsMWQntzmdQ\noyfUoLoRUgLIqHRCFadvEQqXiPtVfm2qyFLtxCZQpQFsggSxxHGdWZwuX6Uy\nySXc\r\n=xClT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIASff53kuDv2W4FL96etSyqJyevguVP9Yt0dOWWh0BXiAiEAr+uJBJRuYTRFH/jtsa5uxwB8DLPAcFa3JTSj+3Y9zKk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-v3fingerprint.20190602045744_1559451540194_0.5319220981839976"},"_hasShrinkwrap":false},"3.0.4-v3fingerprint.20190602050600":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-v3fingerprint.20190602050600","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d1d8842ab5efa78ed5d2ffdd79f217d6bbab05be","_id":"@atomist/sdm-pack-fingerprints@3.0.4-v3fingerprint.20190602050600","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Fh5g0Laj2hzkbG5xzgLe/OwnprEhnWjQHwSWv1tcnO2FKK/Xy2EjWbHwOK3orHMOLOvuNo6ELjU1zPy1rg36tQ==","shasum":"8223eb43df882c638552025e4e9c3d745555048b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-v3fingerprint.20190602050600.tgz","fileCount":91,"unpackedSize":1993225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc81mUCRA9TVsSAnZWagAA0S0P/j66b+KvU7DqgwwbLscG\nXru+lcfexuZOs9qH3NFtQDbhI0mKk9hGI/fsaoHlKNkcTPuJrxTBHRPclSc6\nY/+qnHmFEVmZOKsEz9wcuApaqyr7ayzZbLnH3Fd0ET4GlFlyvc9/cICW6YDe\nNFTJefqKrjMnguWdds+iqkOcCZfaffpdJtXyLj4HUH7zVePu5vavdak+KA8e\nsnz1Re31v8YJmDAxC76ZEc0i6GgdSqbo6eRzyNqzhXVtjBxUBvH1I+GxzoJS\nnuiWlFygpLXVnzRIpPzrhfgY49lkbclLHpZqgnnEzvIv/qwqFbr1xxkMoyvo\neY6jWNJKeKrZdCW9x6GGkoXPsIdIOu9Vo6ZDVPXfYvQ/P21tLKh+iOEFZ2lA\nTz+d2slVKyTvoK/fn9WXAVsjpzUzGIw69yBwVnFpt3Dgg9xF4LSqC/Zbhkhe\nIVpLb1drCu9KN6fAeYA7fWtM/oPNLIhQC9JfCPWLQtgO4xhdPaOdoI5vYJIB\np+XvKZK+w+ihcHwefe8Xbh0CjJww3LwexvoSAyTbf+tbX/47nsMFF0lgKlQO\nd5oLwQChGjQodtd0kvSrq5EJyTCWzYdNSlUWSKbQXg+tAP+DlSnO74N66Jp+\nrhV1CerYMtCrDybsJVxaogLrrw44dG5ELHwNagFWTM/3ika+cl3XynkSHX7a\nrHuG\r\n=hZvh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAmBQbNO6Uv6HpDBul1E5Kir333jSsvA+CjaqWFIb0rvAiBOEUQ1wPk2TvGd1NWZzYajIIuTpk3LZnejyZbFKtdFMw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-v3fingerprint.20190602050600_1559452052017_0.8881354997069517"},"_hasShrinkwrap":false},"3.0.4-v3fingerprint.20190604070437":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-v3fingerprint.20190604070437","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"68c832cb7da25b8907fe13094f7663a6dc5679bd","_id":"@atomist/sdm-pack-fingerprints@3.0.4-v3fingerprint.20190604070437","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-yzV3+GL/gbhFHggBQDsa0myTl2EGXqjV1nDmX7beHzJzImEI6A1f0HUotk71aMFDPQqnph5PmIjsmWk8Vs7BIQ==","shasum":"f197f2e69f6c32a1cb01357f3982c44741f47f0e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-v3fingerprint.20190604070437.tgz","fileCount":92,"unpackedSize":1994891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9hh8CRA9TVsSAnZWagAAat8P/0ASkVTea1crtwqwiDs9\n8daRSF87ZkdWTfnKUru6UjrXU45OcWyVgEMs7yD9m16DK0RXjCk0Q1S4EYGT\neYXr/7R0F/lPolh4y21agTRRDnlHEWJ1dPtaebHJrtY0ZR0y62ibV4LzzFVo\n3ODnFc+OrkUinW71tTtyCUugslsxHjxkOx/wDPmYy/sxIICAxTY3iIaIySYs\nB+7Em3YlG9P9397WNDTf19TNLI3cPo13hi45oCNKHZIWujrZDPQ7syJi3gBr\nZzMCm45ch33RQLp4kB7wUZVf/VU9oz4cN5at5XnTINWLt226ML+AhxnpaD6/\nmGOvdWVjD+w/7FlgWew+8a/LJBDxTFzOPQfxM5H/0yUXzwUmoiOYoLGNkLKy\n1gVvqun07+ntqZNGxlAExFVO8hBmdNX9SDikW/x39vLbZvtD6v4Cf9p8d8JH\nurXSBNSOVPKuilC9Rbt9NvOoosJafgAFUMpKwn3jDi7m5RB/ZxNDKb8yI+in\nLK6wLPxoOLk3YwGSC5CAaNkl65w+F2+xWo8pIpUqb43LP6mdzeKp+RGpWWyS\nicFK9Iglmn/s6sj6EkcrscHJsCLrE/RY1sn/foqebJhJuDiIpUndmhqSAArz\nPVkYlxFi5sKxlaBodOMd2lZP7HEOWYvXiCtCKVW5ea2ztW0f3WYsuzZCENVh\nZLbM\r\n=a33C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvui8vAyk+JdALI7BDYsJ7P1sHjjIz6Q06d4Ian553KAiA2VYQW78o5lJsrB6uoRC1Z9QXvcEVyXBRRxVlEWL/1Pw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-v3fingerprint.20190604070437_1559631995166_0.17673548397209338"},"_hasShrinkwrap":false},"3.0.4-v3fingerprint.20190605030518":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.4-v3fingerprint.20190605030518","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ee5753ef2c3ec725d25289bd8e42a4dede04bb96","_id":"@atomist/sdm-pack-fingerprints@3.0.4-v3fingerprint.20190605030518","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-HWjJX60LLxbz9pJtuu3GZ3aKkZ/0SgrhylvwtLUknSIZtNpqSDVaLes6QLtzDAXPnI7en9rK6toAXoW92Rg0wQ==","shasum":"919ab69180fd5211ddc43521b18467331d2cc90b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.4-v3fingerprint.20190605030518.tgz","fileCount":92,"unpackedSize":1994917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9zHkCRA9TVsSAnZWagAArLIP+gMFSo9qyIRWzVQBMGAR\nvbgOzbCwPAUHr0SOCasB32pRI129HEGGGd6+1ptw+QpLbR23/6mcvrKOA8FU\nsPYB5NHI9tNNXpbH3hhPKsaBD7EzSy4B+Y2NDSQSnCnd6LBFhGsBIary5Tjp\nkOJAY59Y6WZopvzpg6HK0Lu63ngkvQDfrcUutJmvjX67c45U4x5JiWZnUHPJ\n20x9j6b4HLuZo0lygDBhQuWxh7tjnHl5brbwZ4F+6ZDD0HTwTHm6ev8hlirs\nI0hObbLJuSVrX2sXBzS/wHgIL5Dh7+JFZz6SVR4FBg3LE6aIfzTiNp2jHLM2\nyqWNgi93w3FtDknB3zBr7j77G6d+YdqCcYJfjlEAQV1Q/SYYcWvEAbs17VIJ\nzHvCH2yQEcRWsgiGDtNRSPOpP92rIz3vw4J6JJD43YuWt9u10+CNP9jg5jfM\n7Tit64BVnQ4LPDIYtNYSgBDSfq+64feoaLzQq8uha+UYxXm2x+S8148nMC4u\n+RALUYi5qFS75Z6TOr3sE+Fo53S7RNNDJkPIyjrlReN0OGauVlu/rRKdt50X\nXQkFiTRk8TZkYDrcd5erUSXuAc7Y7sUZ82Fz/wOM4qhqoRJNBlSNWJ8mkTo1\nNEd26Dhu09Njf689pxwXtxN6w6L1ezQr9hVVRtzrCWclnQwx/xELhcioVXS4\nflDI\r\n=UkiM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHf7wCx//K+kBymImBIe88pPTk2AhojiM8W1duUQCJoWAiEAsKjPA01E6dWHsXO/Zyx6ILS8Yw9QQ6GLhlUbXc2Vg+k="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.4-v3fingerprint.20190605030518_1559704035067_0.8669178446132089"},"_hasShrinkwrap":false},"3.0.5-master.20190605073456":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.5-master.20190605073456","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f2385dd72d66a7432c87f3098bcf54e1044a62fc","_id":"@atomist/sdm-pack-fingerprints@3.0.5-master.20190605073456","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JfF64sPkHRh4m+MoiMz7/gQ5gtPnF+8+g0XkBxI7b3gosqKE3mRdUk8IACp34EXdAd4H0RwhZ0uwsXGyAOJGYQ==","shasum":"e40799b36824d75b2bed61f234d58a805d8dcdd4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.5-master.20190605073456.tgz","fileCount":93,"unpackedSize":1968208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc93D5CRA9TVsSAnZWagAA+L8P/i0AJAGOKSjr5qIjOtsV\n4TWxL/qkntom4HZukN6zn1852clepUIIXD08gQdPkC1FMLe8bZr/brZu12Ul\ne25qGFHgKvWZdulALaLaVrXf5lM3zlrmnCJMpCawLsOfI35yJYrREwlqZKxB\nBdHBCvTL5Sod0EZ5mzgPlfFF+ejOuhZ3tc4rLMLiPqrRAF7/Ld7+irR5VWjX\nepK7QVqdYAMXk5/dNB0Z6b8ajwwqB9KlBfzhJL5qpLA6vXt8Ha39SO9nvkcM\naUVv4p7VTy6X+1aoAtCs5e1efiYnQGCxXRplRifv2oeRahd20B2w9sLs58C3\nCDE1uJQFwk4Ybjxnn/l+obI1ZeKe78oVoje4pH8SBnEmsWEeeZU5C7Wv7tGe\n7qzRNid3ptajH0DllUKdvDd7nAwlVl59/YJXAsVIxrbsjeKRzNriPO5XoLnB\nzeb9tfZLEtGFfq3Sv485DQEmnUpZTaoN+23QnXob77y5fKLpMhFMEEpyGp+/\nv1u4uT13S+MH4fSkyw2H3xN+kF5VZ02dgIHmnAUVz6NL4EKAPAh2l2Ruxt5m\nxcfcuz8+g/+ppdhIS/+V+lHSc9BDUrJ9KcmNDPHU4OmOcHiqEYKzd12vQKYa\nqctU5Q6s/aYiLbej8+vT+Fq17x3Ho6fA0kpuop1EZo7IhBBCkT1shJqSIgij\ncxDZ\r\n=gFEX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGFXJTr0XKluQZq0Q3UXZz+KcBKT+qU2fI6Yk/+Iqjw0AiA8XI9GltB0EIBAgHAythUZwjZTe45Cx6fB3nJ7CKH0Vw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.5-master.20190605073456_1559720184786_0.682587921406326"},"_hasShrinkwrap":false},"3.0.5":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.5","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.6.5","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"b23caead1c2f572600eaf9a87f9a06dd40638625","_id":"@atomist/sdm-pack-fingerprints@3.0.5","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5p+5G2T4whrfHdvpqeADs8LSt+95gSfeRoYu8opoe8tSlZqpk0vGEzFq4UL16j6Fz0uLF97o5Xe5R4QAHePj5A==","shasum":"3d6e55f769565b2bbe5268be418b73f9cc731e79","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.5.tgz","fileCount":93,"unpackedSize":1968186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc93E4CRA9TVsSAnZWagAAWGEP/0uRVHY0dkCsy1osdcYq\nONvnOF/KDsuYUjs431+D1kD3Qn4VV4TNWdbvpOXZ46HQElXHDoFSZXRR5Ft5\n4pr5Zw50uVKETbGYQoszyhJH2Ry7WX3Np0lU/RI89KVg+NQxhYiYSKey+Eur\nYnfKBmuKhRaGEZIU60hpn/GDs82S2xPtVO6WyqIoIeV7zLW3gXnO+zwQmrTs\n1UiBjdgzwqL9aHQbnk1LCkLZcK4topKy1tdMs8wN6V1vJQGLspBvTv8GbxBl\nLnm3Oon+R0X5yJBDwZV0IugLuDhQ+zvkHK/eGVcDE9a21XarRQGy5Mwd+1dh\nA7UQNcrAxhX4s9rQAnM1RLFJssO2C1MmVSLyhKuon8jBA+8BGk8rtry5zQFq\nwMHiaHM+V9ALuMGyrkIZwTBapLzDOrsHTWWlpmddRgA51J8cc8XJnrtSbMsm\nuWJGSqhmECka5ogMkQ/tu95xz04cN26NYeYp2qsiu5pAHSlJGAHtZLNkR7Kd\nqN6vcbiOvZFr820D6naDn9uM51dqcb0F1a1xbX7Q+9M1eb16slA+EU+zzROp\n7Yany9CaA5GMOUPNCLjfCV8qvU0lrU++CNTfAQdYoCmJEhEwE0kT4pBbo//l\nFvGOuidisDo01xT/JsgZl2gV4Vpv9w78S/AukkqEMhocHSZP4J/jMQFxzB7r\nkmIK\r\n=FDan\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwrgUUju+ghOPC3KACt2db+urgMJSlv0GLxyXVKyrm5gIgHFqnHUyaXtpvCEgj2eu0au3yLk/lHSRm6xG4nbaeNCQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.5_1559720248325_0.9623910471201236"},"_hasShrinkwrap":false},"3.0.6-master.20190605233010":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.6-master.20190605233010","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"*","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5f1f1b0a3bd72b6757b431e87ed64cc697104370","_id":"@atomist/sdm-pack-fingerprints@3.0.6-master.20190605233010","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hzBqcHtuBdSGG6MqF2xs+/RHqM/lJE67sGUkY3RgdSHi9f1Syi5FIT96RCUnMyKbaFpPjMFKsG3nuptUMOqwOg==","shasum":"c4171417b3159a9aa9397cc8863c3d7077f1fef2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.6-master.20190605233010.tgz","fileCount":93,"unpackedSize":1853109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+FDRCRA9TVsSAnZWagAAz20P/j27fkxaGLSEYPZgZaMd\nk+qjsMvtNZx6x1gWu3BPZgM5aIQZGDora40naYr7US1lW0Kmi9mS0dx1xDjc\nQhggdGj6zL2Rk3GsufWJgpT4gW0aHLRoEfdboaDmpQxjzR/aMG+mifxUXBJE\noS27HEQsEx+UC3HJ0sMA9K4nYs48AIL1jsKS4BPzLVO+SnYB8OQpXsW1NjLC\nLqMXCXu/duXV9mQec/jquZGzIUJmGiHZD81IGLS2SDeN9SIEPSMSpoJU1pdc\nbXnGhND7agnPGqyIyxHM7z9ZBjzMZRdgjZQKVxlv172RRUjrUNHA+wVV5HTF\nkuHB+1NGTRfSXZqz9gs7uXTwd3y90vHWontVA5+aSLVYGzJg7Oy7/jrG67GM\nrT0lZU1Bp01mxe63EDO4VHzEpDU4nK9+9HWQy3eWJjJv4GVCCI3Wi1+pTdRi\nYNgOLmzhCYZcwphCH9SyiRGbdn0Li+v1zna0qu5K2Rr9X95hjrsngT9/Pmfe\nQA8kZaIvNQf6Td+/jpIgnCJRwl/o6MdwO5WB5ea8tbCvj/jDrtU7BKbQ6btp\n05jxJ3omMJbIAw3AEBimtHghczoKdH/hIR5ugiR4cEIjnZzAvHUXQfbtxf/r\nEdPVIxpiYQdlEdABRn0DK6YrPvX7NGVbo/6q10WCCMaMPjjiLlJNlUo5ebPq\nab1q\r\n=cVgc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDY4dM0d82gGVrClQcYL3ZM5L8nw5dhbXBhdxBpWSnQOgIhALebt1Sp72IQ6vhaVy+JaX4GY2egpVMVuDpn3RUCHaac"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.6-master.20190605233010_1559777488283_0.6385852598481208"},"_hasShrinkwrap":false},"3.0.6-master.20190606010900":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.6-master.20190606010900","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"*","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7d7fb55f61b6c3cbd194819ed5269fce27b7d0e6","_id":"@atomist/sdm-pack-fingerprints@3.0.6-master.20190606010900","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hcz0axpwmIUboMJ7KF2efcY5NQh74weB65d3bwBSUZMD4BadJOeaIpr8Zl9RcxMR9asT5OMXi5ILs/DzEOwg4w==","shasum":"829a53bffdd1f5ce90c329388c6efe6a3d84a24c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.6-master.20190606010900.tgz","fileCount":93,"unpackedSize":1964621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+Gf0CRA9TVsSAnZWagAA1toQAJXIQR0O+jbSs3Jq+cUK\ngP9gGkz93FrXI/rYVh/8ZWZKic2ZRsJqYWyGL3dU81rRp+N9WzS/PhPx86u7\nHgTbSuxLTfPigH+P0tM7+tzphVRDvui+Y8C3ej1VrgmhKy0mIn9bRi1grREH\nHJVjWbIVEb02Lw/PyTifGl3Bgmfl9OupNPcbR4AOiCNZ4L+ncwYaqo6Jr6yQ\nLA7jUoOmmaUaZrvMu0yLX8o+TlMNc7skItjWvIagIgrFOdHC5McugiAXeSbf\nxwRzxdkkZn02g1t/y/tHYJs9QvAuZGql4bRf4qhwSQSBBYswA5pMgXNSXbg+\nBfUoWQaAtdpagYQHW9k+TB+m1037uWINBssaE8M3PxI8zWWC4v/1SpRfur27\ngvcW4B+HSKU2C0DoNDOdvZfGLaeWMu30r91Euxsw4O59EGjEKRXZFpbcinJA\n1jmvz8FKlYrPw95IJMX6RlOW+ap2/eSQir0htszOnwNHFuET+J3UlGqWIrrZ\nAzI3PbolA8FS90ughCrwtSSbXrD/qMAjFAcYaPl5b1k8xyq7+iMRQ14jVHyd\nFYZyajrO5g4USxD300+Wur++2/qnr3752OouxppuDt2nq/s+S5UzKre/BzEw\nDPKX12YN1rT/N5iycOc2rE6aVXKV/fmeV2yvq0MUczIhsdkR0KsgnLTJS8O6\nM4mp\r\n=y7NV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGAwakQelbPSGfIKUE95rjQl8ZI3RU3hdWUW7WnPJuC1AiAr2KaqRUCtpcMP5Z/+IrZBzUI89iiEi2jhyg59FB+Veg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.6-master.20190606010900_1559783411315_0.9786945715588655"},"_hasShrinkwrap":false},"3.0.6-master.20190606011352":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.6-master.20190606011352","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"*","@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"aee1e23bcb620c473b602e4d7a7f0062c1ef79e4","_id":"@atomist/sdm-pack-fingerprints@3.0.6-master.20190606011352","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9ApvTO6y301WWeabSLtHCMd8mJzdQlnlb4qc/Y9QC6D2HbTCQnBRefod/BlkY/T5jTwjplJ9SqK6k+J8wFHvXw==","shasum":"00c3cb6e338dec073d33f209f3d7e0734e0880cc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.6-master.20190606011352.tgz","fileCount":93,"unpackedSize":1964635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+GkZCRA9TVsSAnZWagAAheUQAJ+ed2hvV6AtdFCATQaW\nYEagXWRBNl0BI7DjvuGdOpN3fgcSdGVf+A14rnv60Pp6/wxge4DSkXaGjOpt\n6/WgirR8pSU5vuACwcoAgHP8GqtPe7ud3Z+2+C29QP7po4el9cGhPGU34e6J\nKjV9YiV1rQ3laOv+oQQkr/zWrhFCWvf3WatwvnsS7sCyuEcFRCQsTzOZGdZz\nU1E914z7gDR0DjTXcjV/qoEhu9ZHSFi+DOuzz6mGjrGRQeHbN9G3/UU4lUpx\njhQQkWLd3aq0sDmOHAH9otIBUR5hrPdjX+jKyFio8C5Ar2eaHxpHmazl+PTL\nqYVAeexlfWO4ifqG6DQbxK5FeWCfI6WKSHqWl5pTpif6WYnZP3IEkv3EnsmI\n+a2kDCw+waPFwiNZrTiXsLnVnIKOtO6+A36lu4Ofpl5YiNt2JwKAK035B37f\nYnaEX3P+swX7jBkEpDiIQfDkMJW/yQA5W/5VdsMg8eA33f0rXhM0xGe/vnfR\nq4DCCw7hwLFgrnYUEkXXAv+J6rmpDpUjUtRCuSk3RpGGxAUou9Xe+lNFso7v\n1CghwLtrUP8Ckvv3DaflgteqzA2PUSt1xfq9DwBRXzV/QRlaK/UGwf+QXJER\naEmkZ6yZZivuWNS7YZpDrze2sYnpK+BoCxvqnFLcZwxMt0mfXO1vizXHnnHy\nM2YC\r\n=tn2A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgHAPc+iswJL/wjecCf12zy2m3D96xtJgzLk+PEzdNfQIgeVmP8FfSSsior0cAEELuwUHZwPifvBEl0EFezPGUlmU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.6-master.20190606011352_1559783704761_0.8642185866457037"},"_hasShrinkwrap":false},"3.0.6-master.20190606053011":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.6-master.20190606053011","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5b8e5ecab59ffdd9c706de8e35ca63be42674d86","_id":"@atomist/sdm-pack-fingerprints@3.0.6-master.20190606053011","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Qb9qoQ+19mBJUu9QXfljD+qLO0s+PPoT4sopQivRd75p+BbUhzyzjGzWxZsz4E1yi7/UKbDGtW3RR6ClLeG9yA==","shasum":"a7a1aa83f17e003163a83752d1454bc7ac792564","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.6-master.20190606053011.tgz","fileCount":93,"unpackedSize":1965155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+KWQCRA9TVsSAnZWagAArT0QAIkNSQq4nEDQbHpisAgv\nQhfFsS/fsUjP8/8hmN4gDSKTyTF7yuC6rJse4kmEf/r6tD5XBX5d/pQpzl1G\nK8CZ25zJu6wHccmi5YBbsRpLnOqLzgD71iiM8e1w344NspQcXmvmuDlHkP58\nfCVeQRFcuncP9pJYbKPXHCy7WOA2d0b9VUC8EkxsfnMCvgSdwHNM+7ZR8bet\nxSweQURBmVpwyJJJgY7TpCotVXuahiGvTH/Lsdl3ml02TN0FO07QI5yXLbHX\npADQEdMoGLpi1SCAVfYV9l+0hb5WSdx02ChLHVjVerUNEkD4jADG9LdS44vv\nA2vx+dS0YhdsApP9sNjE4UpXxCAeWiEfGxEg2GuaJI09Wf2VMGjnAW04WhvD\nLOLTn9xWdtFQOi5HpTKTuCppvsaLNJmld9Is2/jDJ/Q8+OF2ckR81eUxqUy+\nfKduDx70nzJllorlLPfn2NWeKFZw/ePHGqz0KPvA9BZG6F91hCK5dBJfRChN\n1qCG3X5VPpgoHoxFEhr9mDwaOVfkW2TcfrxO4Bm/NTG3AFhe1yiPT7evaB6g\nrxc6zkFv9rNAIzPV3bDnx1ZQsnG4cZCh/uI560ETtAC7V7KcpFF26jqnkE5t\nw4yAG+17uD8emlnEoxhPu2fbrUgFvVr+6a53/PKRyZY3AMQUKFcjBqmI/yFL\nFWk/\r\n=2isK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmK4qI/BucWgFIXE8Bktz98iwoP7UA7KAMMYQDrR2FBAiEAm5HhapkFGv73bRyGVVgdvR+3U4JWzMm8ZJviJLNYHcs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.6-master.20190606053011_1559799183962_0.24870662072037697"},"_hasShrinkwrap":false},"3.0.6":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.6","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"62658ab63f571fe27481ea05fad2efde22cf13dd","_id":"@atomist/sdm-pack-fingerprints@3.0.6","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JLKNdBae9TnDO3ZIZM9uskA5Jxj+PJ0c53d+QP56WDHFBOra/zBVqMegrPnbmiLwzNM5rVjSc3Riwx25jAoOtw==","shasum":"4cbdfae105758b2e0cf1f00639a1ccf3e00eb47b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.6.tgz","fileCount":93,"unpackedSize":1965133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+K0qCRA9TVsSAnZWagAA87oQAKBg+UeqHVRRccfqMXGf\nNvRCNleJrH9U+gdHAShT0uJ+sVRRNg8PiP6XVklmpHAnxm6OtmET/oBbgdjD\ntUeX7JZwAcmgoxF7JbvVe94dE2OX1i16KAnfeS9fV+kYq6xyxXgFVo8tyYWZ\nhBN5Ne/Inv8drwDmkQo8oMZv5E4aDuuunZnUKsSunGS/DaW4oPn2VM4fMbBS\ndHa9TT9OymI1GD2+DEL1S36nTq4oyDLeMydu4rNpXHQ0qITuI36pj0SAmCq8\nv0xHtC1Fi03j40KCoyYf4B6guoysPMuR0OW9ekItV3U0w49kqRLetDAlnbMp\nuY27cnnwelvO62nauCH9OFLuBR+FykQWsy2uAjYj32uJRr0Ha1/6oaHMSAab\nZcMMwfgRTM174HmUFR/9fbS/YcOYe1UBzonfnLat/O/uTl7xAvvRsxLaL+hx\nJHAeu64Kfwz9cN6GYFqRhLhdLa4w1dwYpJ/ekiBi7MujwDinkvCCZL8YkiPP\nXzQK6xyMBuE05ityZ1BUB+oQRA6/y5DjAq6DAgLkc6FXqQIZx2yM3YlgZjVe\nTay3R1RfRRAworJiamYo1znOSLlyQCQrmRAe0y4vcZtSIHFuqX0t9KMcigRT\nbbkB584dGpqX9V46EuTo+ctL7FZLw97pd2qwe38+BRFVgEigUgqyx7XlyqEb\nKzzf\r\n=ilc5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICnLWd1lICpSzVRKuKI5hi4qDghgI+uJCdqtJbTi3gARAiB0QKBGOzw8Omk75i/e+DgO/auGOgYAsJjtPHcTEp3Viw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.6_1559801129943_0.4760960427716643"},"_hasShrinkwrap":false},"3.0.7-master.20190606180649":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.7-master.20190606180649","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5ac04891ea663093c481ec6691b82ed15683c431","_id":"@atomist/sdm-pack-fingerprints@3.0.7-master.20190606180649","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-79l+njDWFz1GEao1L3IzfcXiRPJhFvjF9p4h4KO/zKthjNY+nWaP+BbmKPSjcR10vlyXHQXaZBXetalcYLhMdA==","shasum":"dd335ec1aadd4e944704e87f40dfe214310e1afe","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.7-master.20190606180649.tgz","fileCount":93,"unpackedSize":1965262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+VaLCRA9TVsSAnZWagAAyuoQAISHOTGcbnImATN6yy9k\nQxwNdA4Vz7/3eDelKO15rtQntaXXDsbbjCI0OO+rhEixOKh9KSUejGFUfdbR\nWtA91Sj8Wxn5zkdMZuIqqhIA6pZmurhv31MsoN0Aq7Om897Cr+dSAS5AZKty\ngVrEWzsW2KI+52hvYPf54dzmFOWLAuGg7kDDkQtVG4Ud50ssM26xZaFxNrUY\nzX+ENxotjsk49knJ3RaiyeeL6x2hwyg2SBi/RAtrn4OyfdTxn+2M1WZi4UpQ\nJ5/1Wcrk5jAsJ/GRL5aQV55uzRGp6HFcNus1/90i19gUSZ1Gu9CCRJbUFMey\nx20czZvXyEB5YmWmojW56dKv+0VcnHksiuMXHsCFo3bCshw/AurXYuo61UaC\nSgx9TjCotRZ2cHzS8eskC0Xq9degCmhUF9rsA5jeU7VNhtuNExuVYIkeow7D\nGeqev0supUFtU1PaKxs4oU6JSZ9vchfcVEhjGhvpAbM2mLiIfGaaVXm9A95E\nqLWs/G2DLsq7VzYbc+f3DSLH4kNZXN4vCrc1Hu7wITT6lfysomMGYx0+H92S\ntw5fXsS6UWTxc8xUbJ9GcfXU9EKqFkuH2DB+kAs+1bAxjgdtYAtJ/Uzu5BnA\ncFBE9m9vGEw0x8pVk/uRJxCUB8QKGg/QD90+db8+oOFPp6k9QJ+tR3EBI6N4\nJtLU\r\n=WImq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCij8VhQoN48Cc7iAvS6fERtvclorq8h7i5oZf11fQ1eQIhANtoIpq3kVGjIqYb7Q69mOR77t2+ycSwm49EGgSabkEp"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.7-master.20190606180649_1559844490472_0.9617433087999816"},"_hasShrinkwrap":false},"3.0.7":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.7","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"d709dae7eb529cf7d3ff4ef8fbf50e6ad4f617f4","_id":"@atomist/sdm-pack-fingerprints@3.0.7","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-8hEcclI6E08Ld9bal3dCYOsJPx01BOtDQ3bGHCzoe5gGYTDixnAtiblr8rlyi/LSyXL9VJpEeeFLaJdtgQi0Yg==","shasum":"009c558c78c93179c6ed48e8bcf90d5c96edd3da","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.7.tgz","fileCount":93,"unpackedSize":1965240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+WzSCRA9TVsSAnZWagAAMSEP/j2ZdauR5GIDcidTR5w0\n9REKxs1azOIPLv+YLpmGyVeI3FsC6E6S8J8EyG5Pig2rcYljbKSTkqpaILPz\nTMovTPw1opWTtgVKVVJBEHLCoLWZC4KUwnMP1tyFz9nHT32xNR2MMSReXOn7\now3TGPjBCWobsMuKgYaiQMY7HE9Nk4eIz/SyPjd2LvBrtv5MiWgZm/V2p7Fy\nMCAkegnNfNzkh1pHHsSDK3vGekSYZxHnwYhWN0k6msoO+nViRHZfYDg2h4Od\nvZNhu9UI9P8CDrB+fUkpn4AFx45hflFtQzOfYlUfhdnzKY5PSp/TCnokv3+e\na35T4iGx1UqCxgdUROXZE+Trr71vXi1WzRWP+zHvd/X7e0TljcwNLo9+E5dL\nxnwK/sV2w1RvTtedwFfnnfDnXz6xtl5bzsYlhEAs98DCLCD7yO3oP2ZLW296\nQ63rFGHlBLuJvc8zBPhzA0wULm8ba0N9Kj67/lzisOZ9jbAbzedAliOvqPV2\n/umY7KSyLdEfZQAqDWgogISMBZ6xsHcZpvtoYtDx4a7MBRuXstIQIcvixVMk\n9HceWiH91NZhQCqe8/hU9domw0yCGi6nobOKUZQVeL9HP56ga88U6K4eKvdj\n9R4BbgWOy3AHO82wdHFzuE7Btm1Dhc6peeguPv9Cgve3tKD/Dzq3Mu5/AZDc\nOwJ8\r\n=uxJ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICemTiWitEqeCzancCK48OkPW1PuILZEvj/+V0rsXcBOAiEAh1swWQhihvuO2X262VYRGAVH4OFghpdLuXQQPmEJ+A4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.7_1559850193804_0.5634821134051748"},"_hasShrinkwrap":false},"3.0.8-consistent-messages.20190607123800":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.8-consistent-messages.20190607123800","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/clj-editors":"0.6.6","@atomist/automation-client":"^1.5.2","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a1aa932d3962b61dcb20958b4963d963d587ea62","_id":"@atomist/sdm-pack-fingerprints@3.0.8-consistent-messages.20190607123800","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZWjMYwmhG2e7HhSb6xkZzOwu6XlgC/9jZgIcWHxTbv4+f1pstIT5JWnQNYPStBbFKoiggK1uFgDFyNzk+WPtww==","shasum":"bb09e2e009d31b1d56572de2e7d09df50771b55d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.8-consistent-messages.20190607123800.tgz","fileCount":93,"unpackedSize":1961650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc+lsFCRA9TVsSAnZWagAAKC4P+QAZjVMjkwdS0flwCGCV\n+Lp1tisfE0vZ4Aj/hhqItcmg5/PK0PTnnxg2rTdYjUArzZkUkeEx+SxJ1hdn\n1iv37IHV42ncDh4yQSno0ZMbE+y+nQLzSZcV2FW3rsq+PeCJeL+dAEhn3F31\n9+GrovYfaY9m/uUEzO0UgezxoiqOolu51cGDN8AMz0JAAoIDLWY/h6nfiQ1T\nRrzug9vFZW10g4qrdeurm4MgkPnkxep2qvhicjKMZkENbxdHXrUrtXVCmtLw\nUYsYuuX7Qoje28yie860o1scM52VcTNIzqRVQAGt3pu7WU8Bk1vIKrwBFb9v\nV76cAVuKqtkryMn9kx2xMIR2iYbz5suXMe6dgsmIbb/7gvfHijoB1y0AVbqb\nXzqGjudwhkgI/VAR4I+S+bTsB4TEZtiiqFtCNYZiNqkgI0vqTcaKE8DLwNRj\nh4AEwNdog8HqbD19l/Nb3+44Nh4PkesxIX2EByvnXlclrlP/tIJcDRVl6MWx\naNDio83eDd3KQIo+rxNK2x0V6umV3jRDY5+hnVZn4InWRSKwSqKp2HpEuj0X\nApUHPUvJg5+toyV02M6Kqt+TaHOzMVQjdfMDbOpaA3r2ACogH7ZbpcVRhU40\neGokRgDGBXQz8e2qviRLNhy+W28hGQbeqHZL4ofEnWHG68uOW8b6TbQlLSQu\nqi+i\r\n=a5nP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmdL21ijszgeYNCeMgJPZJ0grfssHDtVR6zzuk9+B63wIhANwc6vacGjxB00iiIsQugpeEl3o14vgq10lzX2be0Eft"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.8-consistent-messages.20190607123800_1559911173012_0.22076480686397137"},"_hasShrinkwrap":false},"3.0.8-master.20190610034702":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.8-master.20190610034702","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6baa0fb8e581c0e85dd174b4969af8fc89956af3","_id":"@atomist/sdm-pack-fingerprints@3.0.8-master.20190610034702","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-1tSQNFsMbYg3FFuWmCGRvmH4Cam91spyyZtnTnsrfve2drRyfORRtZIN7ZFME+Ux6R2o0O4fvJt3hQySJpgX+g==","shasum":"35eb59ce0534bb776bb88d8577bd707f4ef78d17","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.8-master.20190610034702.tgz","fileCount":93,"unpackedSize":1973535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/dMzCRA9TVsSAnZWagAAd/QP/1I6H8JBQ6PLtqZusotC\nz1dITr7qxdNUyCnF+BuR4qheH7xuxP+FxrvM3xDvCbEIoYYViTQ8BiNAUw6w\nKxWMmhKsm03SCp/3hoDcQ7reNo00iUAxxlNVNAcvspFOS20WqDNTy1Dnz9lv\nELcz6MitDrHg2Blmh+7wS6k1mF3LKAoFJ71vFz3mLXQ7ibLlK8EdCvBtdl0b\nSlqstBKkHx2R9M31z+0dOFoX5lrwAOCmvzTiRaUyNoW0U63stFRUtADbbDmr\nQLIPtvPy15pceODoLopwvcfBOwMLBOW8Ge1H/YkcIftAFvt1aPNkpIvAeZe4\nqx4UWK+GlcLAN13N37VU+Vksiw8ktlZ6I7j1kwsRVZYwJIHDw6SfZAHsMn3Z\nV4uMHGd1KbZ+P5shzzMEXNILqyWhQTdAcvEW3Mw6RnbKGCeL1QdcV1V+wx6g\nfBBoY/eFlTZowX7D7R5Y+ljS/3Z/YHaCiJnUffbmrIBNUfecgWrQ5l1rf7En\nq6xXMt25f63vFCNEJRKrrxhDPPEhz+vMdgiXobFvaEB+EToccpuRJltglyow\nJxUvLROy2I8vOGy7FZ6gI+Hokvu1WOxB91HmvaLoCC2j8ID1JyhV1nLt2sSr\nGL6DJWi7JgsJ5tE6PIn8V9PstuWT2ANRnwi0l8PJ9lj2TWLExlXhDl1fr2KD\nCNyz\r\n=Rw+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLDONA7AwY4Q0QiWk6gEOzX+wlGt2fEe6htWwn86dflAiBKiZpR+8291uiFROfkSIi0D/YEDN6wRIySK6tRzzK/JA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.8-master.20190610034702_1560138547077_0.11336483119877827"},"_hasShrinkwrap":false},"3.0.8":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.8","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.12","lodash":"^4.17.10","semver":"^5.5.0","xml-js":"^1.6.7"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.0","@atomist/sdm-core":"^1.5.0","@atomist/sdm-pack-docker":"^1.1.0","@types/lodash":"^4.14.116","@types/mocha":"^2.2.48","@types/node":"^9.6.25","@types/power-assert":"^1.4.29","apollo-codegen":"^0.19.1","espower-typescript":"^8.1.3","mocha":"^4.1.0","npm-run-all":"^4.1.5","power-assert":"^1.4.4","prettier":"^1.14.0","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"7.0.0","tslint":"5.11.0","typedoc":"^0.11.1","typescript":"3.1.6"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"0f9f9136e89bbf6b92dd5f0a50dae651f4846640","_id":"@atomist/sdm-pack-fingerprints@3.0.8","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-GNd78IS0rj9Hu0WpRJ/RQeWE0QQR7I6vWIcpzqjP1JATzLN09CTD3otseIZrz1RDCHPqLmcnzAMjkCMI84s50Q==","shasum":"668c6eb767e98db1b88aca01936fe7b52f7dffba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.8.tgz","fileCount":93,"unpackedSize":1973513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/dOeCRA9TVsSAnZWagAAyIMP/1nIJzAdBpAkzSVYtN/Q\nF4RRVXUOAL6Hppx8oSuAlSr2vKUZqL+hCaMXMHIdsuvocymmzfT6xi1Hlw6a\nJhXadU731+dGJbbkElV1NywziCe4VfEeR7Qe5mPb9Y0ovyn9nuymPF/j/rMm\nSLVJxvjial20jkep6uHoGlKbXvinBSpLWhZq8jc6UizdvBGRr7ivYlJoMXut\n4w5mnxZatAAvIF/MRfo1lsSjs3HK+wd3MVPBPyiLRWUfsUvimS+C4ECds0Vu\nViwjPtX3JgRfOeJeu0bx7rEeoj1S92APhlU2eQGAZyoTpYJoBzuVxVQgzlIg\n615ZH1mnUhwKBf30vNLy2Tl9irlTUexlzaC351ktPyp4gZoDZkua+YZBcXmR\nGp5mra1Ht6cy2v9F7WBEtcKEcFCLjbkqcRmILmKobXFYPgCmHGyFtOR5lpjC\nOvvckboCgahvPSN2C69AHvpRYRDI0ERjwkWqmCnBuUXyBaTS6jjeVH5oaOHM\nUahlAEfPZ3W7y5P9MjUCj9GsgdYisUcMXzYJ4nbExEpEK0CQY9hh2yHi3tL7\nEkGR4802G6omB8NodosFi5OTZfWqPEuq4/hyhmye/PJiI7O95PIPcBHQ/EJI\nQh/pWC6rBWpqEQu353cCmcyKTfKmI7NzDXEGLAaZVmXDBlo6EneWUXKW/2c9\n0VYk\r\n=0YAq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9NtnEd1ycWPVh22l1cKhjDJsMEPMY+V/F4YC0Qlm1EgIhAIu9Yb9TZcrrIjAVMSXWuqqZuNRiisZfdcox/Crq5DMo"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.8_1560138653566_0.25376674286812984"},"_hasShrinkwrap":false},"3.0.9-master.20190610130034":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.9-master.20190610130034","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"55b61c2ea252b2c9f8168acfca7c45b69d39513d","_id":"@atomist/sdm-pack-fingerprints@3.0.9-master.20190610130034","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-PyDebdqMTm8Q64VrbWz/5wIggPzEumlVGTDXzRldOnKo7djf0J4YFSOIrvt0yVGGrf2duejeawifudB9i6o7qw==","shasum":"149eba0c2cfa5a4bc4a9be66b9e60c3c490056d3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.9-master.20190610130034.tgz","fileCount":93,"unpackedSize":1973600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/lTcCRA9TVsSAnZWagAAdfMP/3s59ykXefz6fNglIrhq\nYPx8l9Jq+66UrXL4JDfLnpwahPjg2Quu6kIua5jPk18F/6kvGbeVTo70mWsx\n7DNlSsRbpk2F0Ei4uJzoRerCwfsAP6ivBn/zc6pkBBsoqhBSsVauXw5vhZmV\nhB94ayrQlqwlFWPYouoKda7RTd5+Su9Z77IUeoh7se2GDEsyu4wrYmffH/uV\nRBRI1hIrOx+QCibSO/dTCGNzrtDOLdypD64wbGID06OlCvNKajSwXKSgr6ut\n2Sc/7H7P4fuOYr0VIm80dDBEKvKqEDMJPyZ2lrmTsOX54Vk1WuO9T+cJtWVt\n66AUelsejOHjoJjgcpZBnVZks+Zlegnclo/ggMOLzof+wtxr4pCj4P70SY8X\nXvWVz55MsXTvnwoXD8Cwakl6eZtXKf9zbyEWaBEt8AtDcGjYn3vGMM0Zkcsw\nFWnuOFnYh0BnsC6EjPdVT0HKbaRQK9LNKdmFUrk9qQeoM9TVMD+EjZ6RAUVr\n+db1bim6eubdByFjO0I80w8mjWLR4XOoaBOmB0CiatkXeWtjSInTXHZxBg19\nv70mMHtzsdtxu036KLHHaUBhybAKUaTqUF0tGV4tDWzMU7PdtmcEjhLjDsAT\nW+JLotOMP0gV1sAFVTa2gC5lv+W02jzNcYY8hbnQA2MtQr9nso+Riypo3oth\nlQHw\r\n=kb40\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8Qdytbs7jL7A4FkYyz5U5goxq9x40EGxT/mrLhFkaPwIhALcrMA7s4C3edD4hQ/NORTOAaE/xKMms0oegoSj538ou"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.9-master.20190610130034_1560171739634_0.5984432305069751"},"_hasShrinkwrap":false},"3.0.9-master.20190611021631":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.9-master.20190611021631","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e771acfcd5f8d342a8688338992f21cf4097a420","_id":"@atomist/sdm-pack-fingerprints@3.0.9-master.20190611021631","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Y6WaT2VUJWXN8DuchOgCRK+Ui0gLd4MMZAt5T7DfM6VzB4TCOzK7IdLx+j7x0mhk6p+xmMIbSf/tr4WWwOj0lw==","shasum":"4f208559415bd7ce105c3005ba5d94e48c7eae9b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.9-master.20190611021631.tgz","fileCount":93,"unpackedSize":1973771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/w+gCRA9TVsSAnZWagAAIpoP/1Ow23NRUe2/56mZBKma\nABqm3kPXoG0MX2zQkSlb8DJe5HGzyNJlkquKrjAx7EJDygI04Q/Hke8ZIkIA\nfFBzkXx6hJXhHcg/wxLMgEkp355x5TXYlfpbUue30vWw2qVxjg1/yCQvA1zB\nDZX//WsFyjvyvcXUHv6SEneYFptDVaFakFBe1MO3l5nNbCV7SGo6btVOEnaY\n+kNZzbBEwWy88PoNZrYkwjgWE2r68z181o+RXKweFv7CXG1HzYz522qaDO9/\nrQqiCnlpB1DHqCa52m51o5ZQnjohp/2oU1R3QTCHCLInR//5hBbiT37eZbub\nkOX/Wnso4d+akJQncyuvokQgtH9tipngCfruwMl0+nqalHrR9ceJYhM9vKuj\n+GAsHzV4QECFXnWDvRgksdJCFrBn8dMdEERYC0BP3kD1TX34tOo5ubLc+cXK\n1CfOpHmVQmbPQEeKLN3vWuC/0zP+XWiHdcKntFMLPook+b47bt02JBTdQHGG\nPxtTHjquUIji1f2+8q1bP4qeScW90h1lduHJ8yOhneil6hKV5zUe0hx/t6bZ\n9BF2Z8P1uUjlvrW+9YhnvdIdiyrGQidH80SyGF1/N4qxlYcaHcjJS66zb2Fp\ns8sqiOIDaavDbt60E5SGBLNLMjYgCC7WOwmDvfdqzRD0Gofq0IZCSZT7D3Sf\nekj5\r\n=qw6R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv+s1sRPlpfAneWnbeKPGCBWcnz6z3q5VsyM6pjt4m1AIhAITutjCGd7cHRq91M8ZczZD/rNxDZ219kdHKhAlYdcCI"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.9-master.20190611021631_1560219551541_0.9295737613382062"},"_hasShrinkwrap":false},"3.0.9-master.20190611032305":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.9-master.20190611032305","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d9372c71f85e18b65c5844ddb9d1fb85bb73d376","_id":"@atomist/sdm-pack-fingerprints@3.0.9-master.20190611032305","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-+NjpLUxqDdHPEzLnXxY7SzXfJgr1uIxel13UlO19KfFBc9jSEsiN8yagMBkgM3yp8VxSBSPhmCnaTXNAaf9umA==","shasum":"0d2895f71a5d73dbffe072dcab795f5f77c36fbd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.9-master.20190611032305.tgz","fileCount":93,"unpackedSize":1970073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/x7yCRA9TVsSAnZWagAA25sP/1RjnlnSHIUymLnByW6N\n+pYSfFaG4iiEnOCTVxAnEDUYyN458UZyUhlevq9ixsSoGjCwpPv4wHkdcRIu\nqt2hQHbHOLCg31fAjAMHykabkbGXfIE/4dDLsAtf2njG10KQZ3aYBGnaOvGI\nsC4JGQFbxm/op87mE3VwdgtaQ2xdYvEqgN9WkYTJjeLlO0Ch5MUH2tmyYXUN\ntCsLrU9XB0JLWeDyUpltcQlcdnUHDLYSZGN93sC6dvdAs169uvSVHH6OgJvg\n1Bo4BQOcAYD5UqgBkNnjn1BP3tIdLTJTCl7ETyK21F+sTScIYs79yKzBPX0/\nSgaSvyJzkNrFsw8CjVoDjSfwhvXT+8gifXt3Z8RxKpgTKwmeYOnCcxmjo03a\nE/ti26s+iSN/gkbBgJsJFpEi36Xdih2X3gd0tdObvHB3GZz8FIc0Vs/Ch2fR\n+vzoCE7DFh5F8FjXJmUpbHHbZd6CSizWwOqQjdTzF7J1XQGMJLw033qvx2Rh\nePPYFdsQUms2VSH5bFzaf++2EkKPg1hX3aiSAmwsHygW625ql5ekFhigvMBo\nfJLE/CVi28jjbtnunwg5MwuFJZ3bJhHjcga9MBzh441ccPTEW0o9G9Zom7GU\nUJuOOoWMy6vNqdv0hAjBhk6z4nlpFifcQtLviu3lfC4BVtf1MHqonPLD0xY3\nNI1q\r\n=C6Xg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2ZaVaoECIa4wFSDn5gjVsD/VbFSLDTiY8LYrGOVHXbAIgC3qnXHEiEWuE40UCV04EXByS9OsADVH+ut4+u1ivi70="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.9-master.20190611032305_1560223473960_0.3550086896451792"},"_hasShrinkwrap":false},"3.0.9":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.9","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"92da25367ba4081ba241eb8572ca6aae44f2c845","_id":"@atomist/sdm-pack-fingerprints@3.0.9","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-DfOSKI50ew7N25hVEAYF5IQ4I0qBCsdCcLeqJx7szdblNm09GNhKcdWqTqvai3KTywlNNDfCf+B2Zcu6bqFiuA==","shasum":"a919a61f2bdcd7a5f71444dfcadda95763af23c4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.9.tgz","fileCount":93,"unpackedSize":1970051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/yCcCRA9TVsSAnZWagAAJIIP/3ggcS6vh5ueV2WhtwQs\nvnXgMDPadxLK+9kt3wucnTmCkoBFGc/PPh7+VLmSHU0441xAwATRfKPylu45\n1ulyf2Qwyu3XVBewFD7nQWGHHQICB6X5EgG1jxbJIwv+2lMWmkEPZijZfDxV\n1jAQcyAH5vCdPKRz8cfvlGyDj8HWgCMkGzxpYHp73Vcms3qnhS+1otzNwWG8\nU+LopStTwKxBPAD9B+6F+u3a3kwrhbHO4TqDdgMTin/jMtaiKI4z4oZIcq2a\nEjNH7OeAZxBhKjB5cnnumlLuRH3oyBpVT8JFJlv15sjokLb8VhJI9PntZixb\nkYV+7B9wPllzA1j1vKsovIeyHPUtFYbuAOZ7W5KD9jbBw20rH4TnyscGXvAS\nXqUyfaaCVRSCXf60vICwDaW07dYBcvLFH77VKAJWB4+IrX85c8HxzDXxOcUX\nmgdvt9jC/urs9zLKkCanEX2yD6snyB8VSMjCongegWGf6GiunIWsDz5NQ4v2\nAlCVjersyp+VzYZkSQ6hUKOGp41GAH16bQWc8ZvGMh1eMdkdM05PzS9h3R0r\njONq6pxV6+SNydwdhDLhBRFYm5R09+Y59LLv2q9GnqsuGksaKOQzfO9wnDlA\nMyYntWXU/ow+X2gGZnojzt7AtnH57Nc3y/feJSEaIb2hHJAABFMbZtHeZuGd\nBmhF\r\n=mcKc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAEKGyybCKqtsHHS8RclQTxCOWzNpdFCGjQ2ZfxI1AhwIhAIYhOb4zqwLRTaJ1dc4Vlo1rgXkX1Yav6S4FkW9ynOLy"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.9_1560223900422_0.3636793085500809"},"_hasShrinkwrap":false},"3.0.10-master.20190611081131":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.10-master.20190611081131","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d796b032d68557cb3cf774b79e7728bdf2d0bc71","_id":"@atomist/sdm-pack-fingerprints@3.0.10-master.20190611081131","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-03TLKON3DJkkeyH/dcxw1TIH74HfNxYpfq1EGYzudALkrfXEt9o2JBlLL4Gj2FYSwGhOyuB7iEy9vzzxXa168Q==","shasum":"7c91c2ca7b9a7f8eb89a336fda80e4f85e6a60f1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.10-master.20190611081131.tgz","fileCount":93,"unpackedSize":1970057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/2KICRA9TVsSAnZWagAAArQP/0QT3nmkglpUHRUsqpxl\n6sH2/olNTvMYxjBzCAEEsVH1VAAIh9UUuupKMN595GGrwqAKqOFw6OCydP+B\nEyEyPqvnyrSU0VYA0YWnY81XkA+vBOKMrOY7ypNUjhl7Gw1ZfgjPMMpm2hks\nbKjH87UwNIZX640gTKSc+d7wJ7jbgZW65NDmckKSISue5b/j+jSLLPaYY+O3\na880TiZnJcdxI+9gzowD+zPxJF9ttQVE3QUZbFX1n1F2rlmerN3llgf4JqJz\nXrtSh2h1YmVj8/LVDcZfgyVvhPhSX9I9OaUBdZ3aPa3+ambdiRhPfswEvJQT\n74/MrjEF559zNuTXC7AvaosB5vEvs0h9fGmWFAEaLyQ6+9W7C3h4vlWxJdlz\np/SZwUNx04bpqd7BOK4Cgc8oLtbQrNnrWgYXlCcFxqbMyblBB38d54DpJvyk\nw501LD8YQrY4Q1XDsoxQFL3UGp/p2QUgOaC0QXOOCbg/A8gBlfCvoHs/qtDU\nMmMht6ZjrtAv4lreCIaUNbi2SLan9rJKLGhhCQloi8dkQUnr8qRI9oFUghzK\nOkZIpD9O/Awr38ISOcujP7I0HXv7kEF83kWoYFCXDi8NTvBf/TGOabIjiGWP\numi9lIcr5AuIJVWXtZ3HhBhuHTd2wrtCgxjqXMoHidke6BBj84djMURXFl0F\nFMRl\r\n=Hlef\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3tDrELkersY+C/LP+WvujS1kX5xNvkHGg90G9CQXPvAiBYAkncpGQx63fo7adl2lVrfOOiPzVw0yNf+E3BKDM2+w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.10-master.20190611081131_1560240775739_0.41499800078934923"},"_hasShrinkwrap":false},"3.0.10-master.20190612013322":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.10-master.20190612013322","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6e48b012b8e45f451d33c2ed03a93cdb95c4e076","_id":"@atomist/sdm-pack-fingerprints@3.0.10-master.20190612013322","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-TwvQKILUP/BQrX6Wuk3QZnyHlXU7KSbVl1w029e2BRS3HBxMjBic3T/1WaOa5lu5KEK5btOGGyRLFAjjOqnRLg==","shasum":"061dcac5ee699559ed4c4d378a77e28179b0286c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.10-master.20190612013322.tgz","fileCount":93,"unpackedSize":1994046,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAFa2CRA9TVsSAnZWagAA8rQP/06q5RYjR18zRq5FgyZr\nTF0pDlSEtcNik5MCIzjOtpZjqDWy9kbpgMM0fHF9Abor9Nrc5yeTCUqRAAkj\npuSeJEVkd/Xy+MXuzuLvR94FdXSHt+5UuMeHn4qIa2uBlm3WHvDQV4HusnA8\n2evf0qO9MFRN+1C82TdlT/7Nnuorj12Wj/WCiW5c2qTz3NNEBxk1XpcSFfFH\nlWbv3tRygGVaBMY0GXm9FB7+oEpMt2YBKuyIr4IFQUe/BLmVlMAUkr2lYgyI\nUQ+ped9HDvBZdDs2xlqFQI1I7b0QVWnY7BHS8nUZA8GlYg6RDduJX5slfHex\nU7XSGkGcQmV4o8imJeA8b6yrKnvbElxVEA0bL7+KMIBaixvG1wh/8U54qSQw\nDpbskWNCnpiWm/fB4w7Fr90z3aP5id75RjeCKB5n/b9nhqO6ozdN/grnLKTM\n4B5iDSxuS5+BoHyt7rWNYyWBF6XxJz3TLLOJCCTv72ZfNcww+InpeITC3BqC\n3mTPGKndDWGo7ZRxotY51GQGifVADfCF6Jf50rdaDptqcn6yQ014lJP1GrHP\nYreE5BWhnYZtHoKG3rCVkaDEm6PdmsjV1G6iP8aWOBRAGavnL+DQCtiFkpB3\nL1Hl4FRDExOGtRiT/WjYTQzF/OctxxMdAzSBpMQPA+Ykbw4Hp+eShBh88hKx\nhJsw\r\n=G0c7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF80JnA6j4zi96yq3y+pghqvZEx4EwHniOJyZ3CYpxwQIhAKQVgSgBvSMaXzBtPun1B9MgrAo95SzOge1T7wDRIFM3"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.10-master.20190612013322_1560303286123_0.49580678959766544"},"_hasShrinkwrap":false},"3.0.10":{"name":"@atomist/sdm-pack-fingerprints","version":"3.0.10","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"6d28adba8ca571b78ce7852eb68099103336aa07","_id":"@atomist/sdm-pack-fingerprints@3.0.10","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-g4QnhVEpg6NJjTkgjHSPSpwRZXRVbnwMc/N6ZZ511SFAWyuUZ27TWQtPGjWZvFtScSxScP5jzfCnbIR6a5GMJg==","shasum":"b59954381556017b1b127649366921f176081ff9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.0.10.tgz","fileCount":93,"unpackedSize":1994024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAFcHCRA9TVsSAnZWagAAlHYP/RVmqCkD7SmN/smLXWR4\nLIRCaydBlw47TfUTX1WS/yGk2q9KBHvCusraAonuViPCacgxMIldzC358kn3\nDDzmQqw+d0xKCsYjUetWvBw1Mwv6tRHRMmb/QbSt23pGJgoaZBWUeY8e+Ts/\n+RzEXOu20V70ShJsmpiM3k6kxEuVy17HOTguyh9d9Dsr0fDuCAiwFTZp1RrR\nMZxcLIxeUDEVJTcSy/kFCWJpT1YCIxoSpO9w2BkKeR95GJf3jPw+xRD39plq\nhdjVeyiJ9wHDC0DGvJBgLWizHLs+xzgGdNt45ddWPguTZQrJbju2QbNgqqi9\nn5/5rqS/E+uP2OGQy2DIvaqwVk6rKh90pgkGR8ZoukkQWl2pzKBehoLw+huG\nAa20NWDBUfd3OMQwJKbvtrltxC2OBj7bb8TJmNt2K9Em8KmAn65PA355L7Ei\nHrVR7Luv5WkaLahbvNEzFPjSBcUku65h8k8JkHUR5uVxRcOd6pPxuKFTEczt\nIkigXjieWPQC5hfogZihEVv/sp3hkY/88YYQDFbv+a/npadkLcV5k4FyYhhh\nZTfiIxm4jNJEJ2t5t1PFWmWimjjptOrOlU++CQWd3x6zr5iPAemzWUm1sZCy\nfQVWm0WTEwJIUygpWNbmafoIC8V/FjF26Rt4LCAXm0MmmGG48v+ie9E4tjLX\ntG9r\r\n=paor\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKrJ27YrdNDu9cZOL55H4rYzpjOl+pcHw3sN52fWV9xAiBZGYfhcPRu/IMbS2LcqG+V9zFca+76+b0VRQ5So01j3A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.0.10_1560303367036_0.20528442037132488"},"_hasShrinkwrap":false},"3.1.0-master.20190612072911":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190612072911","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a8aafd0d68ecde7bbc04c5df7533bed4eb6e4206","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190612072911","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7/+8T82qzWDfXzCwcmmjaNfqKQft6pcjQbfdw2Spv38xHNI7BrUIBGUrYEDBoEVbQQZiYHpOuAwU9pjVgvxK/Q==","shasum":"6435932cd1a07d0c9b2096a629ad83891dddb38f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190612072911.tgz","fileCount":93,"unpackedSize":1993731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAKpbCRA9TVsSAnZWagAAafcP+QC869UO0Z9fwwL9ano1\n47tIR3txCLhJKB1/Fh4a1a/j2yvT1tbT8JAgVuaF+dzt4De5xtrHFDzWurYl\nqwerUyhcAhDnZTcdvenNjAKP2Sty72ifPCe6oZu6MkXnqAibda2B6Mzqj+se\nXQPV2y5jnb+4Pdr4rw7YDG9ivWRC9TbJCMVoYEQea6eOTXczjIkT51riT38b\nbS/j70RLjysHQa+4cCM/LW4WYvwsEWMTLSjgDZydLhSJNkYZavtT7iafxMkS\nn0yaWNiwZXPbc/u5L4wJll2eY5ELDS0EYj4UblkmtL/AOFf7mb64APQ3tPBX\n97bBkiRdG25d4QO42xmLVeVgu2+oBKKndtMKJfxqP5cEBI4fRvVlxTPuDHrw\nd8FjM2V8OQgHygjefrbXUGSCkCeFxRlOh8ToonGYHD+6hiTQ0X8h3y65AYJa\nFK1bKVFqDSemzH/m1PJg2h5TmJ0r7Cbu61TE8ht3HNNdNFaTct1wD8tAg+79\nUK/jTtW5nYHcIur9w1lCWBFWQEwlegk6X9ALZsoa2DpkxJVkpLrVsjYlAMvv\nrwgskrFoVYzTYf0KDL80ufMFy+Q+7EQUZo9dgRzFFtigV0X6a2fOcg1zUXV6\nFXCySMYeNu13QNu0v4gX/I4YSFADW6gLsixOKmiHm0GrUVoNld65zlZ8sEq1\nz8Ms\r\n=dH0j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDopFsJDa+b8gJIV5QDZWvAx/o4S1oanB0sPp4eooT+BQIhANzOu3+Me7aRARNslCZ6wQ/LPRLS28CrK+uzR5qOwWe+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190612072911_1560324698747_0.18408237261487637"},"_hasShrinkwrap":false},"3.1.0-master.20190612073230":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190612073230","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a8aafd0d68ecde7bbc04c5df7533bed4eb6e4206","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190612073230","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-BXVRo13pemnth0/0BKhgcl6WGHSHL3sKhdXsaiO34vduGmyMHTG0psygBxv/kS8CCwzOs799eDz7k3uJtmW18g==","shasum":"c4146defb99f2beca7adf41d3c96aad1df34cffd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190612073230.tgz","fileCount":93,"unpackedSize":1993731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAKrsCRA9TVsSAnZWagAAk3oP/1lGSn8zxWhRrQnpwzRO\nUA4fiBH2/FFum5u2X2NFlL4rCGQS3TL8hkUX6989npYkKL6sA2afeOOHcFjX\n+29JLiRXrkgNcUeDMcxn3JVq/0nMcFSolAtyvXqOE7bddry3NCw3WON994nG\npYgl4gEmMBVVPd/ioIWTabHxOmM7SGmvAwX4QPkl44YIRcRXaUhRg2Nrd6iq\nMNUjTTGHkDp7v0YlvhyL2JVyj64EZKveHzuLd9tltyqVetodZbXvabFMORMm\nF+UILGGq3MeDEQ7lqm2SWhMaZ4p2Aet2aVpwipxee8LLiZcdQR7V/FWLHuXu\nD0VBuUiMazAPbKUKysjhbEOWY4Nxl60HTld+8W4le9n4BDudRK1UlujgeULn\nRoyyFSavFMHMzNkf0SRH2/3MAyB2wHj37kDsIegfCWhodGjOLhBfo7uTUHBK\npql++ZFqoWQZbDL0HSI+Ww6qgtfVoPi1+fhTF7XFQ3lgT3QYWfe1o+RWfSKk\nzd3N9HG/XyAWo34XOy9qJYltobOPScAlZ50f7XxEBgaHjYa3xtV1Ppr7NYQU\nwbHEO9iXENvHJa46aaJQRYJslhrQ2p+MgMwDIgNLLWkEjFNgB5sZaiZGi+yZ\na1YJ0t42E5XQFo8/wiMRoeGWsM+XqZg4sGYAYUhGOdg0TvK2sjVWh56l5/up\noUl7\r\n=ja4v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG34V0QGUqxzrRsP2/8eZmGSjIIUycfSJZBBapygYMHQAiAvWrzRP5dWNc6xXqY2vV4SrovSXB12to4mxv9DiQfJtw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190612073230_1560324843727_0.07917602458987316"},"_hasShrinkwrap":false},"3.1.0-master.20190612073521":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190612073521","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8ebe6b32a230b401c97ffb69445442eb72474ff3","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190612073521","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-o9OsIDBPSM3Y74Ww/oSBz/XmtAY/0dPumVRvZe7jkaormHl+o2KETTsKm3lERz7Kgma2nD+X2jyt7f/Oqdw8hg==","shasum":"d7f9c6e65d2442ce5c389ae722f3f46f050985b2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190612073521.tgz","fileCount":93,"unpackedSize":1993730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAKxmCRA9TVsSAnZWagAAf98P/2HnJFQLb+++jqGmrsCy\nyv5ZMK4rXRQ1iv+HExdL62h8z/LQko4qksAYO+/EDEKA0kfXJjQEcBEFB5DK\nUzcJvL8soyZKWKQrYABIzCdZxaDgysMg0g1KBgyR3hc0Bzqo23BOkDsCdH6w\nBpmo92eJXeSzPEg5n2OOm5QAbqlouY+g38lBe7rhqAqE0/gIbHbi9vLip3+C\nHar/xujEOPq2nEHpBwKCHjY7rl7tWlka5Y5pdh1tXuLmpE/ccMbGL0VFyg0W\nXtL45kxVBUjZwIlna/A6GCV7Ag70E+vsP4ODZ/QZ8UH7FYp/TGtGM+f9PMEA\nFlwMsVrxuAnWV816HEPg15TYrwU2O4r1CqfmVr/MXlqxbmkmEIZxFIzQYUK/\naF8oROyY3o4d/Q7W5OSeiOeal8IDR9ioNz+7qtatH1ik8iree4uv3MTVIwMu\nprSJ2dVyccVjO48vNOqMBI9wo0zmGAZz3cbSK3650m3mqElYny/29J2W1+sg\n77BRZalgxZR2zKIKcUkXdwiEzbTm+tmzJ1UB0AiawsQqlCqE5r94qmcJrXWn\n8G8JySsOvZOcFBxVIHUA4WzgvMX6msvURivi2pCGg6PSzazMm7aYBxG4oZvH\nO3wWqymy7u5sE4yYxebc3tdQ0sI0KlTZOb/bSL0qkIJ979xQ47PewSIjohMf\nA+QK\r\n=LY5f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWgZUHqfdWqzkZYJ8JWVI+JKZg0zfNBFADBWYNaegM0gIhAO+UC4tVnjbomJAbq+FDwJMIZERtxKhmaWevYVuAnVCp"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190612073521_1560325221621_0.6505626013051073"},"_hasShrinkwrap":false},"3.1.0-master.20190612075058":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190612075058","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"42cc13cacd2ed815d0982ddf4ab912868f2e1ee3","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190612075058","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-y2Hjdf3xT3tuewNlHzG/TeuLef1Ux9bczWh2MWlF8ov9w5r8P9cjEhwXZfKzBmwO15yahNlcAWSF027vpG2IvQ==","shasum":"0ff755d271c833a99e060e6162dc1ebfbe15d657","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190612075058.tgz","fileCount":93,"unpackedSize":1993746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAK9eCRA9TVsSAnZWagAAoIAP/A3AWTrwaJZzIFIi6sEH\nB0N7U4PkbBBLSVj3YCHgk6uZbh5UdXGets4Dv8xLiYP0J+cQBdwiIQvxddAb\n/UYlzagNkpT97N9+KkeZMYtGeh83C8VjHuF5Y2SUDmCpIEASpAT2hbVOc9ic\nnjp09zWjvNuozIooboAvtsEJW/OFeUxnihjfXluuyTIFYBUblR7RhudeF+iZ\nG9Jv1gB+hUMOjP9x94sjv+I8DFN0GzwCgkoBLdHC3O1iQjRyivx1Gy/ni2No\nOZNmSfXehrj3fXiG3YAfbmvXmSWqQMiK/grTcDf9OXkncZJEDLTeQ1TVq9MY\nlLSrxJyVi1EzmqzQot1CiMTmeAJB/gRoawkIhlbPpMG2jVlTs0fe1h58fidj\nSYImbvabloTTUORhG/6RMR5Grx38gXEwrhzz0ttvBtPYgpGTxzKW2mCEcOne\nr6be+qc80DlW95CxVkCj9rDkNHRo1Wzw7wuuGG+ZwuOlPnIYJ4QwbkZOLY9C\nalYZKNpzzzM6nTod3KWDBY/I6IsfSuW7pBZipOVJpVd2UW/9o4+gMwFgRImr\ncweiLz/GzFJ69Prr1erVJXY/fZekmrjK2S+HqsqHXafN14JaGTyBAHAvgRrH\nMkY59OE6sMFg2GR+RH/rCswQkRVarESsTefU63oJRejszw5kid18Tz5PCliD\nQtRB\r\n=/hyA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+GAMwaHfdzXzY5gNOjZj/l8bgL2ijxYWEoIdEdbwDKAIgBqlguZdMCCasdndnTnp+cLfzHRhw2EmMtaLU6gqD3UY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190612075058_1560325981327_0.1705935289434688"},"_hasShrinkwrap":false},"3.1.0-master.20190613080415":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190613080415","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"adb70270d77319583bc99840419a58a028b7eef7","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190613080415","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-bzEtbb2/I9kniq8U3fcv+5Kx4ucDgkrua+T/nPKvOxtVrFccyuLUG3Qp66p2IeylY+3KcYBG6SbXth+R7t3+aQ==","shasum":"970ab34dfd6196696aeb9055baa1759480ad8b7c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190613080415.tgz","fileCount":93,"unpackedSize":1995900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAgQkCRA9TVsSAnZWagAANt0P/1gRKzyDTkGsplz9LeCd\nxykaEd2K2tZrEXF4YgeJO1zgyTQhxYWxzolgRMwVoqwHv+lEthHdRbs8YmP5\nHta5bMO2U5xfk0b8GTeCXyLJkXUQaVW+mtmYsyUzlRkGG98fHnfjOIPAeyv7\nrrqb0bgRURAT6oxqbPyNumovrXDfXIDZforPVSXHCnl9IMrQwnw9+VT0sLUe\nMc3eSU0k937ebZwFCSM33yFx6CCjFkzHbFRzWqlXQEG1cO1Z4tl4bqFZCqbB\nPE1c+N/g98lbVUXC9FYc4Yd9IcKyAl0VTw/sRxT5HbfHy3XwT5NCYqhddAjM\nurRUGVApEaeDqo8tak03PkUtYhJ1ZbcWdBLgsC0L+eOmTQPhYOwYmZv+aj+P\nW+/zcDpenA5D+e3ehAtEAPnjOoyek9+HFYthllgbtRqbiXnYr+RepU2WUaOk\nfZ0ltlflyKZop3jpkmixzAoWHir49sQWGMUaXScvRZ4PrWACTlAwH7EcZevx\nLZp7ZLq9VUmXvgM0Q4vmZgOJguJrNSf2oYnDDrxEv+QWomQLH+oGbJ5uW1nh\nQDhtXAtFfoRN+nQv7P+Lta/d2arH8GpEJEuGKdm0atLaixQk0qQvf5FxmuO6\nPnXDHTnMauyapnNyHUhR+Fm16FBDrNvKk7uEq9y+2j4x+VDPuRxIfR41YmLI\n9eQz\r\n=fWeS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9N37HQ20xVxCW0lr9BKZB5S8mfEed7WsLiZfLrHT2vwIhAKivudL6VJlodRFdyPGSZaOo28VgOqSuxBaJ4B4zK4zN"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190613080415_1560413219901_0.3825792383841571"},"_hasShrinkwrap":false},"3.1.0-master.20190613085807":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190613085807","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/sdm-pack-docker":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@atomist/sdm-pack-docker":"^1.2.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9170fd12264ac45d116e3458871d62218a54c162","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190613085807","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-I85qmZMTBncO61ys9Ec9t7gFBjtPFOhCMuRAOrr5qPKf+hx/PzymCw8zZHpMb/rZ0a0T1Pv+2SfSrcS5k0TMlw==","shasum":"978f1570e4549927ad3f8c04435add593d26287e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190613085807.tgz","fileCount":93,"unpackedSize":1995879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAhDhCRA9TVsSAnZWagAATjwP/1QdEFjODAX5AR3tC3Jo\nfr3+4hzz2rIECvZ3j4yd/wDv2CFla5m0vT77LtYokHixYookSr5now8jpeiY\nyNOZ+1HdNxiywTxPFAsClqWguPywTHwpA1BAPmewS4ncBNwIDwBfLOPsestP\naCiHzQlFCpx9JKmf9vrpucwLlejG8B4f3eeLgd0JBu8f1f9ZPuJomskRAshb\nloFPS1sTFhsC1/j9obdilBfGglxNL2jbO5aLSCfi3X/fpUFl5CD+ayHTxi/d\nrur/FDOfU5AhD+Y/WKTersLGh52QmZL4Rr6tjsqxH9V6d/IhWPwhcmSuoozJ\nNLivZer3Yet98gnkHZfMKVx67h45G9mLiKhaKGEdGNSf8pPHpnY7pdUMplSY\nQZk2pIB2A4D53jw2p8n6F+vpqWZGHAsVDw7nfpGbV4WOfXbwNyHsWYEmRGSZ\n1PhSRLIyuTHMNkd9Iqmsl0RkK6yikvpHFIV2/VJ7DEHv/rCmrMdxLm9LpJSa\nxbEIyju3SAl8ben0Fg5MUjDZwbcA2gQQNVDjDbl0cikaZ26bsEX4s2pR+BGo\nakaaTlQhuth2qmNcJ9+BAMhMsLDFwhlxxE0vXk0aC9o6uyYp8LtmgYAgPLJh\n58U4XEdzvRm11SL/EISW+jWwwr2rsiiQIDmgqY30KESrzKySFfKbjzWQB6v0\nK+9+\r\n=XP0A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCP7Afq1j9G0YYgI6hikM+8NA7IRzKouI3LMgysc6S8uQIge9ctxJ9fNjL86qZ3nlf4FoyfUjZNFj++/q/cuuSjbKo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190613085807_1560416480725_0.676397851988976"},"_hasShrinkwrap":false},"3.1.0-master.20190614004255":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0-master.20190614004255","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"018231f786dd451846ce2e680b5a3ce9b494ec97","_id":"@atomist/sdm-pack-fingerprints@3.1.0-master.20190614004255","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Jte89gvbeFZ4WCXFcR7WiSD31ubzQfRW4QsXisWEF2SqjWQ03GiKvBMQs1JuFc6FRgQHssWbfwX79LJjnw/0LQ==","shasum":"e584d672470c65f57a51bfd5c87fe789e2444a56","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0-master.20190614004255.tgz","fileCount":90,"unpackedSize":1989028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAu3oCRA9TVsSAnZWagAAo7EP/2Bz6a9QXpU3WVRiHNWB\nywM1fAa6FMy6beuUawu9Z97GbvGKU5FnblGtALv5kqLPdiyXJpzpYE3wa0YA\n7bVagd/KywokguzCh7bJH528QrgZZ/uO4HxreaX7Pui/8J7VPbvaZ14BIrqg\nFA4Rs8ivmhEgJ2bRYSwshphaG7bHqYE1r51kWCTbTxXVzBresuyooij31bd7\nZkevmDMX8TMRiH65nQBSfJXFC3TVPh7sGIquq41i4tVCCC2/NwL0OZjQ6pUr\nWiy530r9Wu9BuPECMaFdNPAfMT9ssk/CPt8VZhBXHKPC7LYks+y7RrouzUyt\nGB4rsv/P5fFOqNqcxNmPnAdIEZ4acf6v72A7Og3TY2OHqz1ZY5RFbvbu08Wy\nq8+GTH9TmF99lMihOTeluyJ04uJJwenM001a7mu3tY+zElsf+krMHlKSercp\nAchZ4qgpxQhNJ6ZMLfyJNmM4l4GaAgX+sgAdN5pZvLVjIbIbADCno/132fzO\nJLTfyeR+f0uhZmp7hkM/8oHIeaHiolQC+nhZtNZCTQOO+8/267v+lLWKaTwr\nzNp7Y24I10VBhylIr0QNK8XEWLmi26XXECr0TkBHLZdEoflF2UsJk83PCyL8\n0VopVUT01e4Kh4mPsya4VteGzQhViyL1NNLgGwIQ1RZlPhBIjKfgJoCK1ETh\n8bHc\r\n=GZKD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHELeUDbfyqvc+AcbJ5eB7GPL/Y4GJ4tkwByqVFBy2AWAiBrDaEypmBtCSrMctK/w98ZxP5N3++FnBLjYYOEWU43XQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0-master.20190614004255_1560473064050_0.6688081174753777"},"_hasShrinkwrap":false},"3.1.0":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"0721b795b8c9e4da50ea6f75346875b80df4dcc9","_id":"@atomist/sdm-pack-fingerprints@3.1.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-1jyKiPIh6gQ/GegySsc7guFfQFSgpAvkRqCeDz3PQPsmPg5wM67gdZLmFKJhVk0SitIilBCWGtbrMzkuIrMgoA==","shasum":"0f890ff61c610741acc30dfe2aa42baceb6a1503","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.0.tgz","fileCount":90,"unpackedSize":1989006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAu8zCRA9TVsSAnZWagAA+60P/3egtIvY65TtRZcDoRnM\nPATHh/rLN7qgbnz5C77vYZwRqtrOvnUO0+9G1y+WET1OQzNGryuq7/xmFNhF\niB6C+ow241J/e2FD47uYWQSEl0fKdnDu7cVX1y6+NMMDNTWYaYtB6UVtpk1U\nUpYXlcIVNAePEyTsq84Lexbgfzie4vYjR+DRAQnm56PGUMcMMAA7wdRFTrc9\njWQ+At3IaB9J40PVpGO8YkQj2/hSS56peCZ5aSslWoawjyeOnerdDrjQfqHT\nBNcZZQ3hFkLR6aqfibd0NzvzJXozV7tH6HtHqqRVXjTloaa18KLOx+Gv0Q6t\nt/S1blHt2xqNjGZjqp0nAcdX9rjKXjKjUfTSXawDPXaLZD2J1G1rFQwejPYn\nMh5bG7TBt+DfWFuo24OjySeHMYoDoSSz20bDAd9AwypbOEtah+3XKmchCnYy\nyUqIRldisTHTyeTZy3/l/yZee3nhFbOWHWu723T8ovrwbYHHhKS8NGSkI2ZX\n7fP5IT5/C52Jh4QkIufi0L4SwvkHID3sVC/FlDi3gouEfuPM/Ky0trCRCsn5\nL5CYMd7vtPmR5wthUunweUTYId8eJRNLvAMZn5yrv5jq81AbhoGoxNL1QAOy\n+rksqF8D0T5BU65gTJXGOG3ZQZzEiM8lGnJrbQ7tOSXUE5fAkyhKINK5hJmS\nEKhH\r\n=eijK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWA6Yrdl4dJiRQfnjpJrCWmgaqn3zLW+rnrXSjHkV1ZQIgWVIHpyXz/ge/MAWCnLR18naUqi3PbFlpn+qFTTmqVOw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.0_1560473394488_0.9442981597720808"},"_hasShrinkwrap":false},"3.1.1-master.20190614042717":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.1-master.20190614042717","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0ac898ff4cfd2ea1f0f4eda22b237bf1a47fd543","_id":"@atomist/sdm-pack-fingerprints@3.1.1-master.20190614042717","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-f5jMr3JQQlXGC9m+jJhTymdAAaM+pa8B63iugfm5dbqNT9Dn6XDvVGsPav/nfmVfbxQHLJ84ijG8Jvk/3xJa0w==","shasum":"630ebb713c5409acacfed6449a237919d4ffb037","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.1-master.20190614042717.tgz","fileCount":90,"unpackedSize":1872456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAyKCCRA9TVsSAnZWagAAHxAQAJE0pCiEIM5a2HJCJooa\nXgr1UT/uOpaP1g0hw4JNxXhbu6FspYzn/WTxerWSxwRA/ID/d6Qd8mN1oQFw\nxzwUbW4FdKfriduHA1j5Ig6MIGyrvAvxEI4HYHMhuayq5gUVLOhGsBe+t5Ml\n0Z2SsIgpoXRs+NYCBMcl+4UAlYq4lro/w5wDkXGEM2x4zsIeyDXbFLRYbjL2\nPwlqYO/cfDiLk1nMFXrKt2c6s2U1rC15054sJaVW+n3Rwq4b3mYfXcqd9uIR\ngVTxzRnfyeIqrdqnjYWSKVSzf30boahB2/fpQGrBF4BCJtKCCoaCzXq7pX+z\nuIaKxwTMbiQFWnP6GSC5OdOYZ4pPVbVZo4vMh3qQBXvXKvVpB5rJmDYsxHvW\nLR31jD77fUPRDrcEcCvi00lBAv334M5kre9/zOhZi0bfzPEz1uu2TyDqesVQ\n0nB3bLIlWjeNnHhASTAKMhEHa1Q699I1KFnqSuyGaVIb9ZKuDHY80J0yQapa\n4zTCravTNItp0j4jSG1NtS/pUtNPtyCh6AFKt3qii8qRD4NGEasiq3deQPpR\nzXBbrS32dLv5PbrTFxoehsqmxnFYmYtpPdkvuMxt6DQjC3qGChrON/42T13z\nnI8+rQcqyFS0XKIGWX5z+N5kZYjx9ujrqkeOW6tbC0oktCTKFvtNy+Pn1ShQ\nEBan\r\n=3jpO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTXInAPmXyEM6s2OHHIRg0Nn3DKuZVZndF1mCZF6umeAiEApAjJ4B6HByBC1dvZFDQ+QhW8dkCn8OcJaLt3/LJrmmA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.1-master.20190614042717_1560486529280_0.2752891826118211"},"_hasShrinkwrap":false},"3.1.1-master.20190614043226":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.1-master.20190614043226","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f13c34dbb09bf55e2ba737f463939f53a749a766","_id":"@atomist/sdm-pack-fingerprints@3.1.1-master.20190614043226","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-oBcDlSN4WBpHnPv+QBiCtnl6cDKoGdjWu4r+2sibP3PUTD8pQtbewVRMid5O6lwqJLIHSoRztsjCu7Qb+w2a2w==","shasum":"dd52fa097ceec0fc0a959caf5e05a9f9fe8aab3e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.1-master.20190614043226.tgz","fileCount":90,"unpackedSize":1989264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAyOzCRA9TVsSAnZWagAAt7YP/j+vWFVoqZKoZ4P/6cIk\nLcxyE7Ak7SO4QTtGquSmmlzvMRC85a7JS0HvaSkmzuRpQ3STnVShVTV0RPMD\nwmhfgWSSlFCCXYZE+pLMxxNZUi07i5Rnow9Yc8O/a7dZMuTHJTdfW2hq24eF\nm5JjRNxLn3DgWmxwPdL3uOHNK6zX6FJBkECPD9ZWNh2WTAaTFbFugeqQOxRb\nDBEkMu7UYZFSni3RgN8XNEjOw65qkmwQFj/c8azpTCc2v31+Z/71Zhv5Lic5\nmKW964dKbzalxlt4/VU5XhiJhdXgT1im8IghyuTw2wQJoM6n8ydWXBb5nnmU\nOzDpuZwzDGicG/CJj0QM0IU52TP4SQW8pSGTe3goKimxv3TQ00I8bjsMM21Z\n6Y0imwYkf3ak0XNL+IHF4INCGTsHtD2zH5E1mbSxBjVip2M6ShvinYWeH0O/\ndZsUCwTQYVPRIC1ah458ztFdtc1ymzcHSO1azmaMF4iRnD8nK5slcLZOWGBo\nFWy4qlSNhRcTusC7u6FikNbCA7LSVMVG/9d0rn7WLA7KkSAGP2Il9nPoKxpY\n4UA1PrXFPtm4sQhDH3au+dUMHEHY56mQ+mcyAIVota4E/ouAI3Gbs0LPCBYc\nqgEWaQBaHJm95uL4MdQ7Aw6gPP4Pq5hSpj7AJ7ZwfaA6jaP7W4mQ165PVTGe\nqLED\r\n=k5E9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAEeEg7HXg4Gi3yb51Ps466IXT+Rw9wskyFQFF5qG/0YAiEAjliO0l3fE9dtbdAr0nQa+nhWo1i9sWnkR/2WbGL8gaI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.1-master.20190614043226_1560486835086_0.04209385725632675"},"_hasShrinkwrap":false},"3.1.1":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"a16edcddcb88f1ea73f4f33c39b031f7aa1f0aae","_id":"@atomist/sdm-pack-fingerprints@3.1.1","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-pOgsBavvPo4tA+3xG9Dll36l8qk858tieUpjf99PAoqiEvFa7iB4SUbYbQiDwdsXc9YZDlNH3EqOEeNcWDhDLw==","shasum":"5731fe3f9cebacae6f56f584c9a0a2e37fd42384","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.1.tgz","fileCount":90,"unpackedSize":1989242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdAyP0CRA9TVsSAnZWagAALLAP/Rkc3Y5/4uqn4Zk7cEPy\nndP3DIywe4yXjBqwLCexTkYcc8Iiai+wtqgIPTqN2VLYPe53SVW4kGQgy16y\n1gnJmEnD43k1xTiIM8CmUeu43oafZsyuyf5h3SJ7RANh+CFBvtXUnVC9o2od\nBJXBW78cz8cwt3plinKzZrJc9aS061j95u9bjNq23TJUuu5kmPcW9E2a47sL\ndYhEKlPofmNZo6f+rZ40sAq7rn5ONP/sNO+ivnwsIetmvz3B1R1tHDy3CT29\nMmYZ4gJBpFOE9yL5e+sNZg4lbWe3k6vNFL+p/blG1+/RHoVl+BRH9iTweZyz\nI7Y12UI/qdBrJLhqSoeIxy3m1dNXF8KP6wCnBbOy387C/4vGVfb1RtYbRPw7\n80qNfBqATU24At+qvJuOyIdIqEaJ3kN3B7sWHHa/pmNiv/M3G/SZrnHJ+161\n3shAJi11KizL6zZqkXCAkIyjaumt/g+xbzSgeTtebNzBewiOEsN7ajojGIN2\nGmMmejSZ1+lw8xrpC6qDrC210hNT8Wtli6Xr19nH/9/DPOjsGyKeHiq446hQ\nqPqJHLXEhBkGv/6y2uHJjvmcansJoHEOkhc9FBvbaX813E4r/gDDxmny1YWl\nDzq4PL3LIXcjo3H8nZ2hinoEieJ0VHmpdrIzPNh0eoU/Y8mRKfh9kwlba2bp\nrDbv\r\n=SgtQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiJGsrsBNpotbx1a7QjmzOLuDJzxBkoS/w07BwYNiBnAiADVFj0sfeRcywzo7XtHJZIuV8Afv/OihyjZSt7fqsLng=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.1_1560486899653_0.0016801534797676876"},"_hasShrinkwrap":false},"3.1.2-featurediffhandlers.20190615232207":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-featurediffhandlers.20190615232207","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d86d17d372d11f89b370b8eeba7d929e100d2661","_id":"@atomist/sdm-pack-fingerprints@3.1.2-featurediffhandlers.20190615232207","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-pJ90ZBAyzxr3ZDIneh7WHB1wC1nBETwzI5FLScGmsA03QCS42bd2zXg0917q3FvEzUP1rGceZO8K3o1Hh+tIuA==","shasum":"e4c6838399808c5fb960e62eb46e1b1dcea320a4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-featurediffhandlers.20190615232207.tgz","fileCount":90,"unpackedSize":1994472,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdBX4ZCRA9TVsSAnZWagAANy4QAIU1/CkYnUo3URP+FD/H\nof5e2F0e4ssaZjn2BbShy4nzmn5/HdGOyaZY8BM/0INw+ZSPWVmIHLHu6m1y\nadeejPz8V4GFln71UeKaO/fOqAEMSVsM/p//lSV5YAFCmpm19qctOcMI3H3y\njzz9InXhGCRhAffjol1rw/erfDJcR4BAuf96HH53XA3vHvXv2byqvpvWY+u2\naUrYzaGgmPX0CxZ7afYbGSrqQVirgiK29kIctOgSFq7vQn4FvvFoHS8AH7zP\nq/iKUsQrxCMPJt4uh805r7JkFE+ZSwpqZBvlSmxT/L/pPPtPn5lUNW4lAfxD\nV9zPtdWhsoTgmu74+JGkhzOmByf2OenVI53WZFnDIkEwpvsxWZn4nBF+pz74\nK679MOxI0PCWU9QoWNNhsMy2Yu7IPRU68gNRRlW5MyNVHPDEN5I+PTf00YIB\nVodGi/OqqwJ2TpDWPI5Gh6pqCEe9UYfk/2Od2pIGqI8ch7e/RNDw5SiNUiDq\nayx8C/PJiIwpzrzQM+9iyo7lsjnGTC0szfxXaLXLEAYOu9q0gVOvTJluDrkl\nIoofC+pAygdT7L2EKNaeEbg4KEPLX19AzA9K/7zQRZzHhe4Exm7RFkKWlF4K\nVXeDggP08mOVSsoywntftYWmLzWlJ/EUP3NMfegGDmSSo2Q/Otocv/yOt09X\ndNNx\r\n=F39e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7Ne9sOgAxHTm/1t3jcvAgY1qDKY/DJLStA8GpcC5pkAiEAtfzu4WxZA5r5kYYyV/18sghciDzu+479IRjY1tyXJMo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-featurediffhandlers.20190615232207_1560641048214_0.312913876025835"},"_hasShrinkwrap":false},"3.1.2-featurediffhandlers.20190616182921":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-featurediffhandlers.20190616182921","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4e2fcdb6e7dfe5e301ea0f2109fd7170aba39edf","_id":"@atomist/sdm-pack-fingerprints@3.1.2-featurediffhandlers.20190616182921","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-51nZOQ09lUx5SxXDDqJksvixuXA1RsIeAVzsZwT1+Yo6FPjeJZOLhsp18UPkBfJe5ozp9eYF+8buBWP+c5JZVw==","shasum":"a863b488d31046fb18c314d0f0c229239c631b42","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-featurediffhandlers.20190616182921.tgz","fileCount":90,"unpackedSize":1993144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdBoskCRA9TVsSAnZWagAADPoP/2BM5PbMR4ex2IZXmyXd\nF27cEpLh2MLKL/WAlFc/n7wk0ElyOSNkEYChOgs8wjHcFXZajCmqJjoZGGBQ\nJnk1LInJadcoAx4eXlFRAsYpm+H9DG4c5HTDomPVfA2qz4wpIhlnAHsbkh1v\nrkEsJ6OjfKYug1ZU5KElNlWW6TV7RTsmzweqp0TmJW6w4+82j372xueFT03H\nT2g14IiyhVtbNh91mQMoLSzL6XrgqSoRnnQdRtiG5qZTFfs3rylpwWUSFNkB\nEI8YtcuPmE0JAoJIV5jQWw+zSv0Ptlgh+1Dirbl0iujQwRCY9O2eJZpTAykT\ntt7Q4U4Ox0NHPHDbSoDcHKRncmMheBLX5YbYWZDULXm6J2G0IbLMrTvPGk7u\nnaXF2kz7gRtAXHx1gPJtZrEW9JG/JCvW/bEdhFEoJU3wpob5e/4XVoJoCWHS\nqsozJga0g3sSwZnCwsUFG3L0YL+vbS9uJZvTIY93a95MXagg0sbA+kHq6m3v\nxRmo5L6qvwRhxWdNcVR2UdzYd6+23VLpCbxC9aS4EJv7VeCEyORube3PgsyS\n9uG6MdS/ICy///RDoZ3l87RlU9SnRFy47PWCLD/oeas4xq7q/SUtQvVPw+j0\nue6k+M2XCzPe11SmRDHpmFCKaCvMss8O3dBdKx6hmpawpYy5RRUWoUe7lUWV\n/geW\r\n=cJS3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyCDn7On15bLtJN1Ec6YMnkrh6PCRGS1yrjh/FZ8CGQQIgS75KUYsgz/LfMssKlvUlM5U8iTGpTauYzNEVU+V8vOQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-featurediffhandlers.20190616182921_1560709923763_0.26027224554052597"},"_hasShrinkwrap":false},"3.1.2-master.20190619160012":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-master.20190619160012","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6fcdb851f9ae645799ae739e493439db36556a2e","_id":"@atomist/sdm-pack-fingerprints@3.1.2-master.20190619160012","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-gewj1ErXgA0PilSc0MJsnYYI9OPdjbAPSuGmOLoTISMJEcRXHoPozC8eU3cShCS7Qy/NHVlFaWh0r4vblJnWbQ==","shasum":"e1413738647c08d8eaf8c695213acc47da7dee3e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-master.20190619160012.tgz","fileCount":90,"unpackedSize":1989419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdClx/CRA9TVsSAnZWagAALIoP/0r3LVRTfGm66zOR7zwg\n8KnNIf2jDTz34JVRUtDy8A/EJLqCT9g/jpytX0ZTJD3WmR/P6R4MJ3jgNyY+\n/NGN98AspxkyIj7SwhqK310+O7rQj3fVaPao6QFyUnt2Fd2IV+RU9sEhc6lD\nR4Ghe521Rm4voZ1IktpT/Pug0AGgQIm+4aig4nwEckgoM/ph4RBrmNzOHRCI\nFn/x2heXS7MdTeCGnwTA7wxd6EPOxgmwe1Ls402Fsh/db2nis4rYWoh2gpEI\n7V6fBJb1kE4FZ1Ebg+Xvrx4LrUY+YxE4XeFPW5E1bkeHlo0pzg/s6cRt1hYX\ndQcK9XOQT34y3k1K35uafwTjOzDkkZ8UiG7JYX8gtfHx5AbVTjp4Ay8WCUBS\n18HTmGYaRun6DqlRx6qSUPlnUXC7kNQyak7SxNfw3KSc7yeBAaTsWUalJk3m\nkIhKhvdfCM6fQfj6V9sQ3Jh/oUIT3Sg5Zjt/+iGv6xSMfvSLfs1B3C6L40t/\nNsrcmAzWPK/ZCy8gTf31WsLy9ID+Qucwp5ZrFHHXWvmjd7GfsJPaft/dXQX5\n0tyyiAa6+DBKv2lcORI2UztDE2BAPJ2VnA3rS8OAzr3TiKvr5V2a5S7tu/am\nuw0mmNDbWwzGYPZ6V8D2SYDVF1SQkUbtQjIzWFwZqEcOuNFtP03eAl5XlvBA\nZMFI\r\n=Mn11\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCj2TMRUOk+/QSoU9PmHKUU4O66B/XiJaLaHRbadIxzdAIhAOnftAs+tGDIJ0D8SBB+o65iUvMX4xxvoOEmBPC7PT8Y"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-master.20190619160012_1560960126128_0.1358656821174853"},"_hasShrinkwrap":false},"3.1.2-master.20190619162000":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-master.20190619162000","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"996da65264b0c012b9b4b7334e10c450b03a9edc","_id":"@atomist/sdm-pack-fingerprints@3.1.2-master.20190619162000","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-y1iC09RjXaMICXzPD6W/V4psRcArgTQcXJcaW/eEwOKxPlZUbECyrfjMgOrFbuWGT2rSFAUei47GPCcp4WWsoQ==","shasum":"b3febf6346f4eae2d1369a871344e5bb5a798835","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-master.20190619162000.tgz","fileCount":90,"unpackedSize":1989389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmEDCRA9TVsSAnZWagAAYAsP/1+hAZc9aNByyAIDwDnb\n+4xUbmLxoF1euyQI9Z0jnmfFy7pSE4QiAFrPY4wIZI7DhwbdCAshEVrZSOLg\nMt1Ae7XHrxMcWSaSkhSj4d1sLu5E4pboz0GrBEf8q7PyA3J3DVXTNNIGWdNl\nCAI4nAyFy5MxHpHgESYXtOisESIaZ7sB/vuPq0LTkJCGsBVObH8ZetlsU8r7\n7gbEyXyCs9+cOeNuXroApiAfispTn/32XaeAm4bk9z/YiojgAk0y4rR1UUFR\nu7Vs4cGW4K2gFaHSjm5YM9kxQAknrP5aamy1N2c+zxndwj12yDgmQVjgtvk1\nwrWsbcQ0Cz0fYJld1EDhJMbXjq4tHbad74C1L59LZB0oIKETLpPGvEzdH/4o\n8Udf6XXX/kwTU0Ba676W81ooKpgee2ZVneyJ94Gm9AGb0521aiHLW9CF1lz/\n7NKcF4RPiNeXbbwXThbqmgo2KKix4RoylGXlk8PGnSDkzcTafyQAVv5uBdFn\nzOEocPpszO7SGYFSkS27uNyvyIrVeAj5Y29i/25bYFLAT+rXlupM1pV4ubaD\nI/10n0sNvnygoiS2lhqf0IZNF6Rj4DGDvHpZ7fP+CTgCnwJwA3Ik5DR6ATdl\neBIDbgybEFAk1jl+5tQXYeG+sUx02wTOxvpEymc7Q39PyUt0xXEYUM5e/s67\naTZB\r\n=lxTG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkAckoJso9h/wJJt8/dnNGTCRne29JqJA7+WTn+c36PQIhALxKN1TyxvcWcc7DCilbTKD1um6nBd4HQAAcQco2sYF9"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-master.20190619162000_1560961283101_0.8305147964785604"},"_hasShrinkwrap":false},"3.1.2-master.20190619162152":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-master.20190619162152","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a7e0bec21ece0d6721e21eae5ba65f5c21d8f83a","_id":"@atomist/sdm-pack-fingerprints@3.1.2-master.20190619162152","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-xRpMa57hSauW5PPK8BEVJEMhy/s3Whm7lR4fRSOtQ3qaAVnk0Qd1lN1W4UOde5+asd7QSMzEBehKAPQbUjDjwQ==","shasum":"b62a9cc2e5a58e958af2591fc3de4112a1e96434","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-master.20190619162152.tgz","fileCount":90,"unpackedSize":1989204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmFyCRA9TVsSAnZWagAA8UEP+wfNsObWHxDoAxoWS+SQ\nQ4fzLJZzN4bXc7XQNNbeBoPceOuRqsGqWt5sKNSyqDd/JCX81YGLWXVveVXP\nJxvWGNDlXVGC04HHmJF1PKA5nxkwMoFyXLYTmgPFbsRkyUYHMJGRRmB9pfZw\n+s7JF1GJv+5Kf59f7PaMYeuubJrJeuHD0YinVR3kc91yR4o8ZH3IouXtr63+\ne1/CqrPYsmUaRe+/UhK9ZOIUn7tHDoMpQvw4T/B3he80EPClbXQvK4c035a4\nqHsznkHmeORRY/OQqujJeYVxExcdcbzvN/xLDNzUDXqHchfWk0vyaiiXiQpp\nQ8t+69A03W6gfZLMvW2nQjRbvYCh5mfynkYD7ldv8hDEQfQgJQhC/DGbePW2\nZIRMW1/OP7yS4sadl/LkfZsvaiZ3oPLJVaCxmbo1GoGXWACcqP/wNn+V9btt\nVQOqNCErH/qbHM4DVBULnG3j8ZWYDI+GC6Xnu9T4c1bF7zxW4XVtW1DO1CQ/\nsiOzoQr0zIHG0xs3JT0RELRQrWGLiyAYoXaxxti92Ux82dhbmP4At5bjiS7D\nYSqSfAf3k+0qGuMQxhAlCZW/AqACcC79bjBPj6DmPLqR4vSR+aydM+nzd0g8\npWTotgnZWkrUHDBZxBAb6NmfjKHjOj/ACmadeCNWnqK/JAQ91/f908XFwNMN\nQS21\r\n=Tdw+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBs1ZSDFOvkQK/5kiDKTRQPEH4LOZU3jKQDZ5ZDtISyAAiBNJvYV8gP/2iyhFJm6Rf9nvb3PG1VsRCPqWjMjhql3gg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-master.20190619162152_1560961394342_0.7088294070924315"},"_hasShrinkwrap":false},"3.1.2-master.20190619162646":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-master.20190619162646","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.1","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"95f2213759de26e6fe6a6e78edff8b36fa357f08","_id":"@atomist/sdm-pack-fingerprints@3.1.2-master.20190619162646","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5OR5LZaVqYSz8tTgxYEwARGEAiXCrUbxdE+jaTDTzK7GdbRtPwOVlbpyv+mXo+VQ++u3/okCDAjLIuxw2Cl/eg==","shasum":"ab685a039bc0c869554e27fa8355a64bb41c0520","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-master.20190619162646.tgz","fileCount":90,"unpackedSize":1988944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdCmLACRA9TVsSAnZWagAAzLwP+wYF9W5EKupm/p2ZEEhF\nmMOqmB5C4YNsp5Y/FDu34KnvOsTOiNXNSgaZib2jeBl6m0pkceTNe98WCkEK\n/NPLKNqWcR5KzrhPB5DBZdTEpep3y3eRUaR7qWkzJC5ZureoF33NvHgsjT5K\nsxn3hJkAbNiIVf5DZROHyInv/XWGH15sqGvH4ZFNtLjL+DH0kJcd5o42FRTp\nJAUoa3Ftopl4AkQdST4ObJNKI0GP8qDIcwRzQ9nMDMxeJQZg81nbJzym9Pss\ndWNQfdywSzLjOUXFzUEYVOrOtCqvVA52unTgakujA3RjisOAstdGx5P5kSR0\nT21xitMPZ96ZYMd2Tg6gIOnrWROQgP69DShwZKCaDeWAi8iYKRt+4aKFqZ1e\nQv/gf9X5jm60ErW5yjHrULhNiUCcglhDdXZ6Bb+OEmFBmGM2RHdfvVKi1G3Y\noTJoE8/p/jIVt4YMpS4L6D6cTc+4z0/pL2FRiLUscc7XkqUvhK1YaCwjAls/\n71dWc/J6PZng3W8CSTKzW8rhUSDLabC6HdBQn47TUS7IhiKjpu4bQTka0hTd\nsKsvtBWq2cyh4ceryXea+qHh1AVU3qo6a0C8vLJkKWPQ2rlaUh0h/cAO8ZQK\nQdnINQjLl6kzboZ3Pjzw3XbeDQWTzR7xQs96BzGGZaO+QNduiILG5wVIdEyL\nN9Ax\r\n=6PQq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERXRtbEJmjcvAyN7PPgxsZBdOAqHsBcncUg8PCHTbJ+AiASZwDkRPIIC3CegOmawDNtjuIRQdfqyLYZiRnqnsrnZg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-master.20190619162646_1560961727277_0.021479606569647425"},"_hasShrinkwrap":false},"3.1.2-featurediffhandlers.20190627010809":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-featurediffhandlers.20190627010809","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e887ae76dac195b8f53a1198806b00a9adf10af1","_id":"@atomist/sdm-pack-fingerprints@3.1.2-featurediffhandlers.20190627010809","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-NsufzrMKsohDhaC+u1GrterZyUItSan3tghHO7Ab8raY+NgQ7x/2WZ+GJDoXSotSQw3S1Jsv0p46e08V7hg16Q==","shasum":"ad3cae4a8aab3e9c3934d78a2c1111187c5991f9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-featurediffhandlers.20190627010809.tgz","fileCount":90,"unpackedSize":1991403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFBdQCRA9TVsSAnZWagAAkCEP+wStObD8PbiGi44cGcw9\nQm/BkjvCfXClv3VAcDwEGqv8+yy5kHOUZ+5FJSH8PvCWTuFVl1BM0bwjx6VA\n3+zbsem/QPq9JRWQHF2AlcQ036SSXYE4JKvetvG6xRmDdY2yL6v2BNxoQ1cJ\nJ4mkwPR++MnDPEZRZtZ7U5SxMhCgCf9QiEHdUKTNkhJ72pbLvR32/yPvNWFK\nlDcU7aIaXRMKZMMvnc7oMqnUIy+SxMe/MhViKchloIdtnmDb2gC6ILJKAJbC\nMcl6PgUIQivmdG559UgsGPItfGNzC0xqAVxtuJe8UA8Q0aUZdjeCVM1C08bD\ncQZr2J2JC4lwN7qzGzaZCHgV16vY/+Lq3nLAKN0Lpfkd3A4pToQS4XuQ+BI9\nAaXcAKsVy1FiWeUEX/O2Y4I5Fdr2xqHUWc3VwycHnMTfWrmb2q/c3phuJj9y\nZ0hHDxWOk8N7Sjj7KagYqxcMDHMDkW0CYwKeqUheySxuUSLJiajFPp39Zy+3\n7joX2m1Q5B086aAG06oBLq0G1U5t+RdVsutrejJtBhDaDLFAADYkyObJHAWE\n9JltdqMNU3fqWtda5rfvQFFFGQGw/PJd4MSWEGwiyGpjYMulvAv5KW0oRQf3\nCH0WlblMJi+JDXP+DB4MAa2qh7gboiUOf3pcbX+Ir4nOV6V9/2W3kXPAJoTl\ne3iO\r\n=zqGe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQNK3PJXI6tW0i7iJz6YxdwPQIgZZq6iuHlzHWQ6SZgAiEA10IA/Z57YQ4Y1/+nWKC3BYnV6WHuhni5tqXoGmCEwIE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-featurediffhandlers.20190627010809_1561597775563_0.957415034642275"},"_hasShrinkwrap":false},"3.1.2-featurediffhandlers.20190627020748":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-featurediffhandlers.20190627020748","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ce5f0ff2607bee5dfca39521f2d0882444f081d0","_id":"@atomist/sdm-pack-fingerprints@3.1.2-featurediffhandlers.20190627020748","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZCA4pJm+oxs/jsI0F1fFTC3/xCt4z1GquevbP/EMbWNDt0XTkPmipRqfxOunE91fOP1TyVAFO/YWO+uhJUfseQ==","shasum":"9ad5b1846150af915e9f28513f6bd806bdedde72","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-featurediffhandlers.20190627020748.tgz","fileCount":93,"unpackedSize":1993090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFCWUCRA9TVsSAnZWagAAgVIP/jZcmcDKMtRnGoZnzvHp\nOsk9VdNIWxs1P8il3TIF9izq81SY1ODHgbyVu3Oq1WDUwDm4Y07fqvAnBr3q\nc1dD2fkauwuZaduxev/9Ic9t7Bj/Bjx3ITtow5ehWResfTFZmWTHlvKdEWJb\n7cMfw8PllEicg3QXeg5wM3hDU9Kgqv5GKwO/ZDgtB7+9iDN2GPZCyrkOwcbK\nJabxtftSxOCgiPaT5DVARtRdfSHjty8kYahmHbenI0w6kfIdrrKVtKQ5D+8v\n06y2CDm2qYx/aKFRo5qbrBW6gVK/dli7NvRAYZs9Trr5JwujIAbAThroqN8t\n83TFto/lKC7tjh8UMbMyLwalM4apJFkMTeUly5XsM2e8sXx4UX57sWHsHAa0\nvAAiiu5fiFQxvi5dSLetRQsnXDaO4M1o0+yl47QHtvWaslR5VUqaxBtNb5nY\nVFHtIkqxdT8YWbz2jdFFRFmcqo+ZpyLUecBF2Lny01+302a2dP7wS5b1a7sW\nuSFklTeMDdWvn8oKNm7uwGZKYz2QDbCduRWE8DWGoYDX4yXB+98CmlV9JvJc\nTJL/FsnZZIslrshV/Dl9rg/A+e6vr3mposMz6vga+3ZF4QIrTBqR8cISI98Q\n69lv58BxfZrOwUJ5g+XzGUMBqcR2ybF1P4D8iZtcUuPRjQuiub66uIXu7bRM\n8yFl\r\n=KZzH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/FZXt3cfYgb8rFXv57IZhiZtLCUSWzBUtxTRsXffpzAiBmtk+lFj2o1nycWKR+iF9CtHE0i6M/dm1hfuOXDm5sTw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-featurediffhandlers.20190627020748_1561601428146_0.6098225215625752"},"_hasShrinkwrap":false},"3.1.2-master.20190627022447":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2-master.20190627022447","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"91397bdd4e0c998a2cd58f664be02312be9c8602","_id":"@atomist/sdm-pack-fingerprints@3.1.2-master.20190627022447","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Tlp47bFIOqUKJspRc6Zuiv0dDT2nkn3/S3gzMta1aDr5X05jxahCBReznSZWyrojBUD/83QURaEtU+zKUCVl1Q==","shasum":"4d6163649378f4d4e6dbaca85af6ff80b656ba8b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2-master.20190627022447.tgz","fileCount":93,"unpackedSize":1992741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFClRCRA9TVsSAnZWagAAHJ0P/22u2f5CSjsAxKVLSe+Q\nvi2saG+xFsCau6/xeOeXZ1jlYWp1B1MKowQBAbdcfTXw3IeOGLrvsPkTAq7H\nBvNrBbBmMlOptVhKuLL339unuiT+zsCVAVijvv4lP2/1uXa9qa9h7u/OEBZh\nr2ACIWVqLRwlxCUC0+WGaDZnYAjYcifcgyz+bnh6TIwIzvzxh7hob3w5KDoW\nxW1t/z0u4OzcZYVeTUa11vJWzAecm6SJJAJb4B5Mc1g4clpjQbo7ol0mojcX\nw8STqwLwF3sMTUl21L7YJiapzVpFoZ/p15chM6AB2QjV8jT/tJl4tLg4YwFs\nwAJTA2fJ/aIjjgU1w/yRU2S7n+JTKrAChRxKmIySapN+FmKdvC1TUAO10lPy\nXD8pLZ105v6siy8hehdkf5o4+3dW4SlXlGbElgiuk+lJYeCIsW18kEawmSyn\n9VXP9ggptni+EG7i8h5QbpiZgCF9YQFSDwuct9LJjN9FjeNKSJTpGRG00tpZ\nAXGDxzN6mZXgZCHWyq66Q2oxaAWq9lJdHzV+KAxmB8AEzXyaPppO+7P/a3dB\nxebMiantvqGA3dbdhrziJK4Zf9tQ/2I+gliFAwHWj17pjNgTxCEej5snstTS\n2xFZ2lvh7QgLZ+eW1Sn5UeTwSm2z4lA1uG0W+3qlW604SO4d5eGOtf2ntO8t\nXp4p\r\n=e550\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFTikmT59tC6ckxg1lRv4y3RfIhCDmsII9jt/HaEdhdAiEAsGylkpxbNN2r4pm4isY+ul4Q7PXrvrB00okegdr2nCU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2-master.20190627022447_1561602384555_0.8386414098284196"},"_hasShrinkwrap":false},"3.1.2":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"91397bdd4e0c998a2cd58f664be02312be9c8602","_id":"@atomist/sdm-pack-fingerprints@3.1.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-4jH+8MYiLeVB4QSJdPfJUUlF9LHqkniQnqe/Je24pJluTYNmO4BfrXLeLgsZqEGS0r02tpWWx/ueknMzUAufZQ==","shasum":"db7fc273b65933f6b94e7350964454881f5df4fb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.2.tgz","fileCount":93,"unpackedSize":1992719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFCnBCRA9TVsSAnZWagAAeIkP/iPIKMpc/B54KPnu6BFH\nIph5eaBijW3JJC/Z98IhC3LECeIBxSlf41Cxgt9p/CeUqM0yKXFwLmaTKOLA\nPRo8O+C2KrcAIpf6wnwHVU17Q2icKCpkSICBCF3aHJCOoF59wcLaXnMtUcUg\nGkZTKoJMQmHYb7xFe65JVR4WBOFRLwBQj3yZHoNQgM+/h+tN0dVGtZVVoI2z\nU13uB3B1D+9zdg8N7tjCJ2f5D679C4yNGZM7dUAstMn7gcG8hY87sLdlJECL\nvf2IU+3ptGo7NcRpHLaewhsRQsXKpv2BkLNfrqd6D+Wyha396uDlWyKi/qxM\n7w3hhbA46jRpyUXYxXp9+8sFjLBhCR5sALiwCoex3bMjODEZiwktnRBL3lfQ\nob1QzuZ3FGj8eg9RSvB5/4r01YmGXK4QW1cYrQY2lxCW2WN1/GHw5rN/ywjC\n8XkNPqKJmg/DmKZkWqJPIHtM1LJJ6YtH6AJF7IbkvCjAUJfzDB5X19CX7INJ\nSa0YqPq+vYesnDI3dQn2D+6jOKg/aHqeLQDbFn+BgKag1CQ0snf6u+n31Oei\nJexM4mwetRYiWg7hbHtioRELkBeYDshIdWbHDOiRsSSzMrRnagFZg+INXiHk\n3szZUikrQMk9xEf2YyajFMdSF0dEJQLsOQLqJZ7WDiNLykxMyxkap1xosJ8C\nJ2YY\r\n=cAbH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICyV9HcEF+GnuPnJ3REv2tSyD7FZISnMjgcaAFSL7zr8AiA0Uc1UbO8bCqyb89R3xE1hBQVGk1XZQEeRe3YY/Q5X4A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.2_1561602496690_0.625961803911135"},"_hasShrinkwrap":false},"3.1.3-master.20190627023512":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.3-master.20190627023512","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d48b3b4df8824ce4a8249fd5c5631ee8b80b93de","_id":"@atomist/sdm-pack-fingerprints@3.1.3-master.20190627023512","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-oMGzLvCAUopGXkziJauA9ZSGe0v7gmOGHH/QlIldtCshNN69Xctaat/RhGJAZy0dibhrGvkEveJ0P1h+foySuw==","shasum":"d26ef217a87c10ce54e2ae07bea71ecd3b9b96f0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.3-master.20190627023512.tgz","fileCount":93,"unpackedSize":1993089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFCuyCRA9TVsSAnZWagAAYk0P/j4U2Y5aae+HTLVDv0dN\nnWHv/+wBA+inDw2Ul2ZYLvs3d8zOJi/XaPW110Az5R1WYMBDXAVu59ruHynC\nFX+BNJBJb3ft5KUTTaNSrgtnAWrBwXVEItXgDOUiMt7FqF0ZhxRI4HUcOj/L\nEkgYh/b2woqKsg3GPV62tM4yvF20TijHFMmqsz0lqoLZIkfhEi0VuH8064bq\nP6FLZiEN7goW5Y8j6TdCRsvFM4cFLreSCTZn+3v9j3KMd0qcVdKwf5aBsGkS\n5ZciJFiJ5olOrXN7vdtTvOAOQBsEExxcpAeceGclUZLHjVbNbMLfNtYslRt2\nqKafbNxab3J+mYlOZmnh1ddtLVHdb3A/hAhNhfPymZdDXM5kl0S9Bo4Oocwo\nhY4x6pKs+opBaBUbdNpG447DqzEgMFrV0kKBcW0HQJRsvpYEt4ZRa5fadSNz\nWRDk/D8WxkpZvC3tZ97ljmtz/yQuFNhgvwsxzfxcMOPUTox/0Cr7/gYvE9oO\nlMghIr9PpLOpj6cNGDRv4RuHLF2Pw/ZdeDnfB+96XNAgl0eZgrMCH06EZRp4\nJeYVM9g0vPF78LzE9ULZZ3l/Cj2d5L22vcCxVDTIReWvKhiLSKZ9GbKVBcav\nUib4gZKGpVj1Ux4nk2BOzPgO0kW5ECFvYNGaf5KIz1zED/yoeweMnT8mzfvB\ns5hK\r\n=D92g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzOV86/UpT6xiUFShH/RB5AQMKUggN3RJlvAp8W8/+HAiBYQ+9wx1xlZC3k0UaNnHPPVv+WumLAuqs980nv80efig=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.3-master.20190627023512_1561602993774_0.42968734365974726"},"_hasShrinkwrap":false},"3.1.3":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.3","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"64995bd7674d0e38c854aca4f9ee3a8f7cf46544","_id":"@atomist/sdm-pack-fingerprints@3.1.3","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-yCe8/2zpyVJWN12z2ZqD2bncx3S1L8NvO4M+e7zhewn9FDz6+h0XV8iM5GO9y3l3EuXYfV39D9EUJYpxSiCoEA==","shasum":"2e6c3d4ad7ce1c4334dc3171f24f0ed9bab5fea5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.3.tgz","fileCount":93,"unpackedSize":1993067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFCvxCRA9TVsSAnZWagAAwZoP/iB1xzoAccsX+UTzYt+B\nvWPv71fVEZoQNEJAOV7j9i5l/TS5O5lQ6OSb61kCGydgxNUStDsXf6QtK/Jf\nxu4CgTU78Wdb7h2YDiaOzEffb3fPGp3Xv1VJJJw4jDLzRgOLmJ0jF7YUp/w5\nOPCqzMtbujd7ui3tX/fZ7DU0iyNFWtq9GzzecFmd4fz7k0jSRqKCTruJAaQC\nzXRBBfFRxhg8edqX2M2zl8RI9cHvBV6LYtonKtT4hJXU3RU8lilbC9PSAibR\n8pvNH1UtlOtktLDd/SE2am6wumn6tV1+nAFXSyUdbr7zmh8k7ODmLTUzCgbB\nUFFSlrE0yHaE5V49Pb5HfY4M4TmeHWPxKp0MhBxZqyfdVk0F0SzvSjUe5TPY\nKI6AUQHsd5+fCktYkJ+xi3DxJaxassW8voeopweG6DYKuueHXymM6PoK5FkS\nbowx/LCgVdeqIDibgH7GuJGaXCxUGFZ+d2ooUjXDyU0RyDBd7Tj4lYf4dIdK\neNroVKjg53CutS3hAQumNwAoKEeN71Qcn8hpEj2TMS8TFex2kByjGmBcq0Ki\n5OlOwjTEkgfdHEcEvpLsMz65DsZIEh5w5aNY9//ZT11B4r500/2zPi4doyq8\nLTtfdlMDB+9deU41eTjq5Y60Kv+IU6Y9h9rXdcCn51E9xD2jTvloZxT0mOs6\nnEf6\r\n=NLuN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvImxBCSt1jDya931ha+7TeTThNUMeaOsAcxUT3MOPZAIgGG4ZwEjLFT5l1meHn1KQUcDxsLQ1d0KXeL4qN7tuxRs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.3_1561603057127_0.6105906732958235"},"_hasShrinkwrap":false},"3.1.4-file-feature.20190701180015":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-file-feature.20190701180015","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e18df012d3ce8ca312067d7fd947d1d0408edd07","_id":"@atomist/sdm-pack-fingerprints@3.1.4-file-feature.20190701180015","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9yQ8Zyzol1pPcpdhEmmM59y7fSZUPLB05uWu9yJK9mgMbJtyqRXNKxTYKhQHTmqQsxZGf1n6l2rgTtm2NG1ZXA==","shasum":"895db781183ed97fd05e4375edcc522164f9a378","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-file-feature.20190701180015.tgz","fileCount":93,"unpackedSize":1993314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGkqLCRA9TVsSAnZWagAAi0oQAId7RaCd4pycuK95v/SK\nmcdSI8m0CO6iaZbwi5I8oog9esJ2IsgcP301pAmGo99wHMv6zjc7OSxX4KJl\nyGhzgBW9OPLWYPAsA7tiGE9D0oO49Sh1M/sEaWcrTRU0O7/wGGmLEKgO+BO6\nprGmBuxNQYAJJiS1o0+ZwhH6jdjjNZWLh1sampBo1gbtDYgwCPzI89taAxB0\ndru8lQNcTDt5BidlVQnnhP8xjK633Rcmtit68HnIX+Fr1C5ncD3UPi58WerC\ngdSXSn4aD0zREh3sFrjOlNM6VkSTUgadDfv9nMwLQWFnVcVXvcWAmbzlbCxr\nntNasNWN7ciU0wrkea++KaQRK8tHxD7vMIhEkSpyIO6EIerogyMdmQJ8ERF9\nrZfSJJIzxt/cRwsqAIVAbF3jRlhDBUl0k6HfkuCkvVgWX7en4wqZrMQH6Q6M\nj7PHAaddUCalrWxD+hQirxBwzYi6rxX2XXLoolGby8EDu52U7kfN8TmB7JJ/\n75Yqrf078z8RHaFJSFX/NTj9idMh5Acr+S00M8Ac7b3owNPN8IIhprm9uNBc\nH754hWYsMNV5iVUW5VNUJTAxfedmhqoKIqfpxXpMVCkFaqAngqlqYWK6Wdc0\nX4dMxRrnpja0pQxEXcEZnle2KQHNgFXiI92TZoGrIur/x9FffBJ/LOMoInr0\nr1/x\r\n=4hsv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaqKVqOwhZv9zvjtiD4FcAJyJtr21rFomv3Y5cDXSWZwIhAMR7oMQKjyq8/gpwOrJMsHj+DPMvFruXqmOzvLZhfLNU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-file-feature.20190701180015_1562004107060_0.27800501030624436"},"_hasShrinkwrap":false},"3.1.4-file-feature.20190701182944":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-file-feature.20190701182944","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fc9b5262e1379ec234857a645bf6e791ed6d2363","_id":"@atomist/sdm-pack-fingerprints@3.1.4-file-feature.20190701182944","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-uyKYkDWzNBapgsBGyW43sG1J32yKHrmXDwc3JsBCCVpAXEOvTLRmzCB0XCQzsulJaK/wlcmO+5B2gYvx0fdQvg==","shasum":"2f7ab1734c12870316bfc2767bd241422fe58340","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-file-feature.20190701182944.tgz","fileCount":93,"unpackedSize":1993333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGlF0CRA9TVsSAnZWagAANNoP/1Yc/bau5aooyRwBLc6X\ny3qn5GTzzJHSnXc6TXqcGlhgHJoh15FfQaOV8woTpxaoUWI23c3vLYdARfwQ\nSCBFjIlAhZfXKDYHUyyEahYw53eZwpnGeQhKkiTEYYmiqLprusxLR/9X9jbI\nYtkYm6C0sQBR6vJ/1gOuxRNHpmohQog1K1ytpyUvbqNH64xt20L8d4f2dM3i\nPo0se3lpBSNXrgf72EslzwntqfGBLo5shEX2l3kIxf+wfk5XWTEhh28cxJIS\n0yMJuoeHRb9YE0/1Gvv4zL248kSkp1B3F1fdn5ONj2tIF7AfTLH/BLfhr4Mi\nrDSJo9hmheTopIuymCX5d/ch3PqO1jZf7b9SQqPZGLawVSQpvelWXc0cNPSn\n9WLag2hDxld5Yyey6IQj7o9C6LOoxQ3D2S1vlKC99Gnylo2fWqvbysQ6yEn7\n9RF+nJH070cGW+JD0MOxiDTdXUcRVoEU9WMFQ0WFSxpUHEStjO2YSfrp71q5\n+ftoFRZxgwrSx8yGRrTKJpOQfaPkdTale6BJjFdpSYnAMc6JmPjvyAf3aFqX\nZrft5g8KXyRddEay1jEyMvU2711sXht2m23polkI+81Wu2/B2O7jPxYCWeIj\nbYOK/cpXUCdyEu6lyiGQRXN9r9IN6xkpyAzD60GEvEuWrx57DZ8eJ1hw5Ej4\nlFKV\r\n=il5d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZcIgru1zk7rvtFr94p8fE8OpEPRqrCAUq6cTbP7JHtAiEAieUEZkvEzsfsrLhHmwmpXJMgp01Yii157r81gMKl6nA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-file-feature.20190701182944_1562005876156_0.8590059335065183"},"_hasShrinkwrap":false},"3.1.4-file-feature.20190701215847":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-file-feature.20190701215847","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c27051540f3c5b2ff64a6a67d76b05bd83d0ea4a","_id":"@atomist/sdm-pack-fingerprints@3.1.4-file-feature.20190701215847","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-mAiH+hxVQNAUGkXpx8SaoVjw+lsHlNzgb3jeE2ldotAUuCnpI2cljmKL+QiNpFEjtHblMyaOZkJ/dHRyWITjAg==","shasum":"540e3c098a5118cca47b97602d17cb6c0a59f0a0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-file-feature.20190701215847.tgz","fileCount":93,"unpackedSize":1993310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGoKzCRA9TVsSAnZWagAAjIoP/1ly2NUzDrs2hdDL+Gqs\nXbwO4Huwtvy0FaCckPgDw7+vvent9y5dHIFwgOc3sur7ksCxcBTgmYD4ceVz\nOAb6oag844YIdWSp5snCxZsoggxWpJ/NfJ/FiTn6wi9q4Gz0SbNuSmVQt4vU\nFZsZXYJPCWatgeNROxhqSR9iOjJcFKJWe1DuogE5Sjab8yXkLyeGSpkd5OX3\naDJUy4j2V3xOPWL6tj6BzyxGGwoyuAhK3TbURtQWK7G3otksv32twIxEsObU\nKwBtDQHf5W003M7U23wIlIJP0c+AMHLLA6hvxa2Nodawey6Y3Qbbf9hHDPWa\nQEsfsj4Ppxkul3pb4zSSsyzf6iTKV7doPwQh9SvP+ZHlTdgl+ac0rNxxVNAw\n1vzwXWf+BMgCKQAnHgu6WJ/F8kruDag060PGrC4H8cTdF0k9WRLLea80JrHE\nhu4CN6PCkPNkTy2H1XSb3yAFBLDqzPTvxNc+s1E4VdClpge4wCU8+rwD31z8\nJJNyH5UFbpe4A0dcUY+GIvjJy1lNTxTNMDI9VotNrwsxCOjtqDRuivX0XOyR\nQ6vSxIBIkIWpWYBCH4jZWB3V17nj6p8BgGmRqn5D8x9kh+FBhBHshMSRoaNa\n4I6XCDf7zia8OeDR8zuawsl/fwMvgMardaxOAn5IGmsc0vpwu8pA4nWJqzph\nJnP5\r\n=Szwp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmuZB1IPlktgzpjx8Dnl+j5CyJiOoRlXNKNFpnmPXSMAiEAtKKp578cqS19vHGXttVgpd50qnNc7fhG9DaGg4sk1jM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-file-feature.20190701215847_1562018482218_0.10256880148678538"},"_hasShrinkwrap":false},"3.1.4-master.20190703172504":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-master.20190703172504","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.5.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0"},"devDependencies":{"@atomist/automation-client":"^1.5.2","@atomist/clj-editors":"0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dda272fce47b532ad8a563690a445db79606c7c3","_id":"@atomist/sdm-pack-fingerprints@3.1.4-master.20190703172504","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6Ux+3s7VIpRaX356e718Iqkv8uaSH6pAAOyRwtH5e1VP/vD3f8AUhElkg2lK6h76KRTNOq+7GeJuSlhji5X60Q==","shasum":"d0fac6eea67cb6a5767fd4b274aba92e93f89275","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-master.20190703172504.tgz","fileCount":93,"unpackedSize":1993304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHOVICRA9TVsSAnZWagAAOLMQAJjcy0n+VNtfU5hFS7lb\n3G/GYYzeEMyPlMt0DW/L4EzMAuKxdxkadze4F4QI9xXvuud6XYk38oKbg+pM\n+9bulCCQfDSvWA4kU/UREgjY6AQSHca5+1RQwGDqFu0e//Zxwf9Cr6vFJMPc\nZNS1uvXekOKTWa9ZV9DGaZr5UW5wJwv91/gc5l+lDq4ZZOcM24mKUy3QUc8Z\nan2fMqNuV3YiLYcT1teomZ7AznxV3MRxG2L8Q7r0F6esHlx3g9GzN8m783vB\nViWqPqaQRoaFRxvma2kS9lDLUjKfNm0PqqaqHXZRFEjN6djSC6uWnnqqX3Et\nWoQlY/AlPDNnIIucprrMD7lyHAu1Dx+zm/WcdcOnu1qAqv+LJ5vzQ8MxGmr3\nM9GUpPZCOPZB0jW/dVJJj/VAGZq1xgLjtF55BTvXYvTRKPta2Amj6HjEQGol\nHJZsO4sT7WTSI1PDV4u6fhgdsqwpkSn725KCy4YxjQSmxI+P82ViIO+v5vmL\nmT3DDlIgTOmwIsTJq5VxEPKOOqYpBWNMaNWW5V8y9V8H5ogJ4EMcP2xUcfU+\nbT/G2rqrQ4CUexSyZ6t8xIa1sE3KL5FZQEfcLkkvM7JoEILW3oq8ATaOdOCU\nq60OSBWqkrkkjO535JpbzBA7KuBmeNGQIrSns3oGDnsPa5x9ixogKLmOAzd7\nO4B+\r\n=VFnH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKI0+t23UvoISNLlHAwIa2vlGSNPN7PHUMKkgDXzk9BgIgcJ7hnULVNIXjyfLXoubo9JPYAdwfl+FDWLoAbjMRwDg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-master.20190703172504_1562174791531_0.11948748565153"},"_hasShrinkwrap":false},"3.1.4-noselector.20190704053319":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-noselector.20190704053319","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9e5bf0b45160ee422463823dc94058df75aa19f2","_id":"@atomist/sdm-pack-fingerprints@3.1.4-noselector.20190704053319","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-f1yOOVIUSSH6iZCWfQkn/fZqeSkg0+NT9hkJy8hQJ6xajKYVdJ8vFkEQ2bRDEEHXwfpGdmBHHn80VgtkgCsCUQ==","shasum":"81dc0ec333f364aef3a4f0a429d57e0fe6cf468a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-noselector.20190704053319.tgz","fileCount":93,"unpackedSize":1992113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHZAdCRA9TVsSAnZWagAA5sIP+gI4BYuwL73o8l0s5CIn\n7KVSGX0WpLsZ+plSLclpbcaOYkZD6MbvnbnbZMBYcurGZfbYNH+DnqImCyFR\nOUbutf6A5Yk05ldCRujgG+F/XEN27NUjCgfHx7VeIKx8JbvInAsWGBZ3cGdy\ng9A/XxbaJQgMz8ptmsdE0OQpMYhi2dhWOnRFdS5G/cCxjbexXKQfP3gsPZuV\n4nO60cSY0R7xzMiXBAl070EPK/VGlr0ZTtgAEJG4ACAkCh8jgw2NPpJhdUtv\ntcNnaOeBptkWaoR194fW1lTJxgki7r075UdITGeuIF9I/0LBhgoelXAixZi1\ng1jOVWPY4q1m0uqhb4xlM/jY9rP87cZdNlrVOR0ZwofpVhlg1FzVY8qaPGc0\nNDKlb1scl+nSKjOu8YPKgdkzgDrv5/QZeujcPuCSDV7mRYBNWYWH4RBGe6ZM\nH+lWLRQHsiHE7LR1ruEvmkVr0LOr4mgQJEFlxz3yWdEAJtV1IDp1RAkJSufl\nnevDAH4m25+4JSPy4IHG5VQ1+iLliuTgqXHuaJnlxXqscsqP+q9tKYCoWuuZ\n+QMa2xLQGyrRbRr7Q9cyVHmw+FrsA0KOzbuVsjkVprAsi1otbIRjaRG1bacL\nuSHTrOuWFcPeVcXD4cU1VWYnCGF7ni7c0+770iAIq25BsXo9QHqdOYSZsX9U\nH4MI\r\n=V0Xv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUL9bPi5KHW2SFV30XPFvgGvF60vxgc7JpYUxZoExd6AiEAp5dqz8cBnRZ3A63+XWwApG2zKDmBBL+mk9O+7D1+TSM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-noselector.20190704053319_1562218525209_0.9178414869097888"},"_hasShrinkwrap":false},"3.1.4-master.20190704054837":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4-master.20190704054837","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"695c26f40a222525f433656f3fc417b9771aec87","_id":"@atomist/sdm-pack-fingerprints@3.1.4-master.20190704054837","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-I7ARUWFAeuxb4s+12a+4geP31BHuUSw4D4LHQCptG7pz7xoI0PUKr7UIiFZyGYxcgKPGsg3orUszZbz5/llIIw==","shasum":"a621ebfe63fe1a0bc543acbc94d2ceda90c6b087","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4-master.20190704054837.tgz","fileCount":93,"unpackedSize":1991014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHZO1CRA9TVsSAnZWagAALewQAIVSmftcqBz9IMfsF0vA\nVEsZGcNLUDWjjfotyVMzUDCEoZWAGFwlUiKLTTyO9SI0AZDM/JcnfN7mhzgy\nhI68H+pl0mYL55eE3gPbVz+DLiO0Q/qmaCf0Cyl9f70LVNGOgBYPM0thaM+K\nyw7Qx0ht96+J30gsMZ8YnY+eCYWjzcD/fImM37fMM0EUUSTyccXtzbY56CJn\nRed23wkSfGnlU+cIJK3xUESmPReab7qXviL76fA/apO2Un0VdK6sxI1tPY9D\npwludv8vFhI8qToj4K2n671pjAAK3VCzsKCT88n2faykAD8uCWRzTZjKZo4y\nKq0zbd3udhO2USiDaBiaSqmQSh3DbqD6u4/+MD+jFX0k6lVZeDUdPe91egAv\nNRqRZt4kVmhZSfJlq4G0s3R/PABIa8FhGbw30+iuBgLRW+O/QarnbaG69joh\nNQDn66sD4mN6ydYXL/hRWxu5maiTI4O/lNgJKO3baF/r5wyJGInJeDUqs61T\n9SwcEGoT2Q++5yLbHs+qFA5U9Ra92uhTuDwjrctVqo7y0DRJbYHd6PvDMnhq\nkkSwhWfkE+F49ds/UdCYvAOIARUHOy1ws2btIuSq+a1Z0/sbDpaeKTqggq61\nVqR3fmjG01CB1qjiLZ1RpULFEuPQUNLd1fXuL4l4eakPr46+//BNgC6jsQif\nTJOY\r\n=K8Du\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDwu+BwauKMMlsUANRk86lKozWjbKz9XP/u0QXU4CfQQAiA1BQZ9R0IR6FciqgmCMYXdxLLdSpXqNpRu7oczxLu+Cw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4-master.20190704054837_1562219444742_0.9356056942642568"},"_hasShrinkwrap":false},"3.1.4":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"3cd47efecb142587c339f97e62634a15912aa6ea","_id":"@atomist/sdm-pack-fingerprints@3.1.4","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-3s9SMVg3YA8XTapALf0hObFZ4P95KmEISapLvw3r1pUqF4fR8jEB6mPEd5vY6cwlbi6ODPOKc0E5DRzgm/ZSEg==","shasum":"5e5a7b40eba4cec4497810530793adddd30902d5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.4.tgz","fileCount":93,"unpackedSize":1990992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHZgYCRA9TVsSAnZWagAAtIsP/196J4lAQKMjZXiXKwBo\nIVVSM+4q1sRFnygAm2pCOvt6vJfiwEuoLTe4AfqIJsU96KkhEj4zf4C2cwJ0\nH1d9elGvQLBTm6z8yqrgQYnNIbHtyyb6YCcbAxKgh4pl4iRmBvd12jXH81Rz\nT/1LmvUEbsFnMTcGJ51C9xnKbLMnAiq4GqfR8fo3v3zeF7z6dAMsuBb+wDXj\ntS/O080myPhlPMi9aS0sLj70uG2r31+rWgDnW97Tguc7eNhAWXcQyhq/CNN8\nlrlzonmKQQp/qSwuxmZUvwv99RHuTw5XrmsRwnH7vgZyGzqkFoh7cTvdce04\n4CS2Eand3kP1pkpgpuvXEP+mAk3P/5+soWP71gklq8PXUZMy/VW+78R7GwUp\n3hxG7H7P4t0YIwYCADYP/nReEeoBpdmFbrvfrSM16jXjvrINapL8T8ZX2Oac\na8YEUe2EBBdC0EZeqdq/ZO/q9tEo7dqnpNsUQpN39HgwbgQSvqWvpB4P4A0v\n0fuKIb2x4YteDIonz/BRqLCopx3z3e/ZuPZRUIKhXOLgRbxA5TKgbvkFPfbs\nIHM/rg87ptNioNGkVWff20oWuLVUM9vHvjUHQmodRFuFiWprabw15ZI51921\noY7tj25WZHbPUY64LZ//R9C6tG4yOKc2v21ih4upr7f5j8AbR1miqXvJY6/c\ntzsE\r\n=0xoB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp2bDqjhk6BEdzQ+oNTo2e9bpCgD3y/FnjfdSSit3Z5QIhAPIe30F65JW3H9SDDZdNQY/STLOdxrLFLgTICBS6kWC9"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.4_1562220568217_0.23189824440579399"},"_hasShrinkwrap":false},"3.1.5-master.20190706031206":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-master.20190706031206","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4d511cd6e0b216867e5c31b53c3215120bdd430a","_id":"@atomist/sdm-pack-fingerprints@3.1.5-master.20190706031206","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZQp8UYLIN9PA0rKTpUa2Uatcq36RV5AjNPcspZlg1dT9IraMsfMXbw9wmAADVF8xlwoqprCAUjSC2/6jxGW2+A==","shasum":"ec3fc144ee612cf5449abb324b1b5d8967ee1221","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-master.20190706031206.tgz","fileCount":93,"unpackedSize":1991156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIBIXCRA9TVsSAnZWagAAsWsP/Ry6B6TZLl3Ne0IzGb93\nf62vGKuXT3Z/XIh5+lIhpvGfAwy+BpoqpgRH8XuTaZKfBH/UUNBMMCpvbY+M\nAYfyPZfvtnQmdCivC3dqrHLsEDv+dqziCjwXm9hddDuYVB7TWQ0d+bUb9FOE\ne5PjtiIK1vs0qYd94s9wx95walAXkE7ArzUpJckFmGLlMoTF9S4Yq31v30sQ\n4v08LeF9GaGsazPTM6tAtFnVlZMGOwtmuIRoe+//1dLvu99EK1IApQ1SImCZ\nJzMkcqu5xrwPrSNb28hbEi5vR0jqXG+L/6KZC4HdWlhhlYwJZ2RBb/Hjpa42\nJCSVJLbx1eSbHU5TB0xqaWT+HmRah/HNDuHS99WsoQY+SDtghtc0RlzCY0VV\ntz/b0nMnaW90RfVxI2bE3VFKMqYwK7RBPGJH5NRiFXRaqY1f1YeJTS4rSoQq\nxLoBiYBRsFLsDuusNRJBWKWQ/nHECNuu+3l244TmiXXR9ROVN0mpmvPbEgw9\nHFsaCh4ccAFVYpo1VfPblY7H0N7WwGqHIPz5+Y+446OXkNkfNR+3INQwqpio\nJFkndLKKHrBCMdb2WL+f355aERdmbg9bjr5hiOu83MHY3n6rajcSMGREHSSd\nUqotPogQEJ3fNG7jjegeEmRTSzFE/KaYsVyak3YHB3ULZJeTdPsuZJUhtCFe\nDN4L\r\n=O586\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5K9pOzhiVW+Smo4ay7KejovIoqudLFagDNfg2zENDHAiEA+j/XCNuzq2hug2p5/2Lnj+4D0KWJtklMKMZCml3Tn7w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-master.20190706031206_1562382870138_0.4544508869914732"},"_hasShrinkwrap":false},"3.1.5-master.20190708032952":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-master.20190708032952","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"267a07151a874a472ee53fec7bd6f11406cd8e37","_id":"@atomist/sdm-pack-fingerprints@3.1.5-master.20190708032952","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-55XOil0MxM7qm+Gg41GKzx4rfVIf1hVLQ+uK0ScSvPK0gw1ljuUiiP41Q3wjK8airoAbEDDQ/uOPKqA7rG1rwA==","shasum":"a206d43ff71a8cfad304b00660d18d66a2ce57d3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-master.20190708032952.tgz","fileCount":93,"unpackedSize":1991596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIrkOCRA9TVsSAnZWagAAHwEP/j+ft6dLdvhUba3ZkBFr\nCZuebClYQrRcVZ3dKt1lT/iQ/9D7uHRcCWPTH0Ft9cDgjBHgObCirzMtH4Im\nhjrPLB7pwY/f97MW/ho7YcXWJCQO9t4Mehmcd1tx0E+zx7/FnuyXKQb81RWW\nZHQLPkhCC1NCJys4XzEJVkN8EYozy34ySTr88p/CJxMTto5OyHb8s9VoO8IN\nsxXL87jQvN7NTIkO0v4LkiJkWdcIf96/0CcDLE44AuhydeblPXzp1OlsvD3h\nEneI2p4WotZ0jyxKn7w4bjp/SqwHVYFbW7XlKK6+PKQAt0ETFR1vgtCogfN1\njHqloj8WuAQzKrVt3Xs6MfRQxdoDzMqH17D4Z/gi/yCj8eY9nahjFp+uAhFW\ncdqg+cO/qBLC/DtGNla+l2SfyrSMyU2AFGS1esnVU9eC0lOMu9cQMjft1zNA\n9v/ht0KfyiVWaCPGSsFwjurS95HE/+/CchToh5agkRfutuyF2qDdyna6by0X\ncFWK4t98PuH51UaNHBKRfcHukEWzftuunLVs74p2WRXSBpdO81Ojaoq7bjSV\n2YrBw1RcWbiTtfmHkLIowp19EW6sevjvPqtUuVMCqt1wYZyWObeCl3oWrCaW\n7h3s6UBfqIL26kTpPS1uaVKt7iyLPymCYpOaDsJtrFeWxUH/lr7+t2CiSTsf\n96qM\r\n=2jht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFn9xgzwRZQ9t3nYwNhub2hsxgvyHN6BbEtMVub8YV9HAiEAwCPKw0eOPfgUv35iqQi5KvNnCu5tz1060EJ/DqIZovA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-master.20190708032952_1562556685800_0.666407691440625"},"_hasShrinkwrap":false},"3.1.5-master.20190708091203":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-master.20190708091203","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.0","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"1.6.0-master.20190702113653","@atomist/clj-editors":"0.7.4","@atomist/sdm":"1.6.0-master.20190702114952","@atomist/sdm-core":"1.6.0-master.20190703072440","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2584e124bf59cc4081e1df86b4c21711e67d8a1a","_id":"@atomist/sdm-pack-fingerprints@3.1.5-master.20190708091203","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-vtKqr3y9ZPgkL4oVnwNrIPsuIPRfxR+XEDKoapzcuWzi0r/EK5os1HhnIp/Oz2OHobWgkmiMfY7lAeMaG+Rh0w==","shasum":"c38e6dacb60db8e18f6d6eadf7b6da8e2d768f38","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-master.20190708091203.tgz","fileCount":93,"unpackedSize":1992153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdIwl1CRA9TVsSAnZWagAA384QAIQ+zKnvkfFDK66fM/6a\nodz+bNi2x5wyNkuH+x9x3fHR73iK3KQxSSlh4+DLYkg+fucySWdoGsAn8NGq\ncv0cfVLC48xurHzj+mbpmsbYSUG6exkWlQb8Ogp4kHCK2pnPX8PZQpKqjwlK\na5/FER9yZgI2UPV1PrWlXunGoqreRunyAfvwZ1SZEdm/XdzYpC3YywS0qVdY\nwgP1fJGdtB98ZOs7mSTd19Ow03mrhrh8wq4ZpG7XAhoAtdatBnxSbJ5RRcsc\nWhTGY/dbvBv09xFVpQ6qUwJnFTgI5uX6QNCySL7IqvxM/k3MVV2yyfXb7XWC\ngwKv8TSoYoYRXLHrvW6oYYriMEKS7nYbCqwPsTqWxysLZDq/D58E/OCLwhBG\nSGTFjoYpBWx+uIotpC3Oab5ptSPSuvbzeZ5y5I8G8Epv4QJvHnIgO0tUkH+9\nrSx29rM2d/3zdySNh9g7g14ZN0k3VLBFIJHAG9GwsI7NtVppwFqgq+UrUxyt\nenhHu75OFD4MgIhUnOQMvr4KBvq8HJqmMQ88IZ42PrkELESqPsWHTPhWTgox\nDt6eBzW2ZfRnw1ZO7qN0zRxzQ7Merv86kNQbZ8GDKOmXlUUUFBUaUV6L1JF8\n/dScYgcnrZ9JwNCPSOXkm5ASbRasHHX4KkmtUAZ9b54yWf1QN8qtLFhEuygd\nurw6\r\n=YGc8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGu8Ur5fYzwo0Y/1LOVoQnUUo+KUvYnbMvCgIBaf6dKsAiEArlmfv9bAglt+Va1mG7Ci0k534FB25WhVPjo/tDn7nOk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-master.20190708091203_1562577268935_0.24883989536027795"},"_hasShrinkwrap":false},"3.1.5-atomist-update-latest-20190708194931.20190708195125":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-atomist-update-latest-20190708194931.20190708195125","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.0","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"cda48ba3e8ca73de0ce138663f0abc97f00cdd75","_id":"@atomist/sdm-pack-fingerprints@3.1.5-atomist-update-latest-20190708194931.20190708195125","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zUvgFaHPfR2W1tbY0HkYqjpeHfzqrIuMZ6uZd0lt9tQ1Wg0U57Yk9HeiV2OkzZO9rkd6jHSnhFRxI+UdDYjSwA==","shasum":"2f1ef6710875fc8e835bf21b77b755fdd5c3a860","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-atomist-update-latest-20190708194931.20190708195125.tgz","fileCount":93,"unpackedSize":1992121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI5/qCRA9TVsSAnZWagAAbhoP+QBAh3e+BA0pdwSuuBML\nDwRzgnVv3kO+TEsUxs7GI5m1Vxl48mLAQ9ErLDFmKSDr0KShK3+yDFnP6nuN\na+lof3P9imybEfRuzk60xgQAFrtjKy8E7gmF2FIY1SKsT71GFpv0sNhCONN2\nra3pBcYr3xKmyOQSctno0rCD1wklH3stpKJk7HwgjpVzF+uV5qnhFCoqCFn2\nxFKmrwIIVxFrmvUdi5yg0NXKWBuL64+pclYU8XV7lmYsuDEXHKuWNM/CW/pi\nsNiyEKmmU/YFE0R/dv3Re59DvhcHsn5Nci12HmhDktNlxEcFAFlnRKkdjptY\nO7MvQ/3B5JIqzG+JZ+ZwRgPJZgS9Q0VSRw73bEq5lUh/2/KzotFSZTTyYJD1\ngA9dJGiqKqWK3Mnj6vEh1XReYPypI3WCC6cEFn4aFLLH/zVHC+qDQ8wIYKhj\nPmKm+mxHPRwuyCZCuipHIKNot7F33GlAgl4zj5qOdw5ephk/iAeid/ZukCRq\ns8h0TIvQqeNOU4jo+1mBj3ZTLm2ltwh75K1VwzmqmmxyFh39o++CO3dfMzVD\nI0O3pDzQsPWlVTiGkg8H0he0S8z+G9C4J8IZKJDnnSIdldJZSCHrcKjTwHtG\nHOLbbuUFjDNPt5H/UNptutEtZ30Lcc41y4YkXl1ECDgWiCzq9s0rAigpe+k8\nIP8z\r\n=nvKZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDlPdQ5Jo+7nYjA5eI3FyzP2HJvL5jt4DIscKAeyLnWwIgIpflGhNyioG4u3kW0Lbjeu8aLfGWnMBizJn79DKr42w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-atomist-update-latest-20190708194931.20190708195125_1562615785876_0.5353923873210029"},"_hasShrinkwrap":false},"3.1.5-master.20190708201351":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-master.20190708201351","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.0","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2b32a6af3bd13f0983752a58d820e511330ee03a","_id":"@atomist/sdm-pack-fingerprints@3.1.5-master.20190708201351","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ny1Au+DYRmoUtAilOakSVibbBuBsXNFviQvpwSeqlhibNU59KoPd1BSCmDKQ3tPVS/HBctYIGkOKfrmBAT6tFQ==","shasum":"2e5cc974834d425dc64386898f2aff51d9f7a90f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-master.20190708201351.tgz","fileCount":93,"unpackedSize":1993993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI6TQCRA9TVsSAnZWagAAUHEQAJB+bO8WSugLexU+RW9b\nNHcO3ItzWARA6gTMf//f0alJaC9hjXyJjoamPBHvM37lgqA0EGM/hCmixhOp\nRPK+rPOyF02/QC+Yu0i1MV8vuc5L1vvjCsPFYa8Cb60jGoGWd0l1DNrNdITD\nwvmcMeTQfhIl83ZboVy+Jq6oSRqwcwrL3JyEmtvutByFImOS24HVnBWGno0v\n1sYVm0hH38O+voCO87ykIM9/hNrBjrioFXu+7CV1LVfXO4Qs5yO59qvm2CC9\nlqDndX6onQsdjSugsC5m1GVs1iZ/I31RVztY1KTOzU6ICHlIko6R0e+Tz8B6\nYuBWaTBZM1rwZK2smNipAzz5gUpDPJ/A3r3N6C7FgFAx3og4F+enpIuGuY5G\noQNrmq2MkXIk0qjsIlPIeUEJaAUjgsSJ0YtHnua4ORN8ZU8BKLBRTSfrqilr\nx3QmP5aYQM+EJyHcL7FNwzcvlJ5jxqmLpOnRuPr2WcaY7X+QFJZna3p/2uhc\nJUBj6gxBmCW2dqqPoemFfzab3xSu6yLxLDPrqC09PRINxf78XxirQjs6aeN/\n0lhasOSl1P015Gmpqep1qI9Nh9pxH8gMPOIS/kW6tSnVI8d6NsiBaDBDbK6x\nInR7iMM5xTVrQXVqMjHR5XgUqrSVmeBCQyJPzbROF+rw+q/ulgptlq6oII93\nT+FW\r\n=ttA5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ3SMYJr683wLswEwXfTN7i1FRZsWE1B7gunkt8P3BvwIhAODOLTobhkLiPE/YnNOZBTgShydWmAja+kVvIhs2ev5j"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-master.20190708201351_1562617039652_0.8125133973278096"},"_hasShrinkwrap":false},"3.1.5-ipcrm-listfp-sdm.20190709145239":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-ipcrm-listfp-sdm.20190709145239","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.0","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8b0345f601235a305f2cb38417f3c93402268ea8","_id":"@atomist/sdm-pack-fingerprints@3.1.5-ipcrm-listfp-sdm.20190709145239","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-UqxKLaFpIv7e1cX+TALdlRamECTVStABHsCdL8HJKFpFoGGdbFpohLrXXLSiViPX/W6pwpomSfp2vFYtRzsToQ==","shasum":"ec4745c004a0413962676fcbc4c69af843117176","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-ipcrm-listfp-sdm.20190709145239.tgz","fileCount":93,"unpackedSize":1996844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJKrlCRA9TVsSAnZWagAAShQP+wc+lexohtKNo7fkI+GZ\n9DooxZQwSBL79HpxBMSw/lT/h+VQAKcctT2aMALA5Mu2MlxWvSnkNPcWx40I\nCV/3hsDjULyddFGyRuMwOUGoSE/URqoY4lyf+WCg3G/KEOWXwM7bZJ2QeKzP\ngNlXkt0LixxKUtlr2fce8acySCr9yuCW33T9GlsN5vBQHFe6Xxg/GmO4T0/2\nrD10G2hCLiQ4CkP1rEzmkvBvKb8maCOR9bF2AkS3qx/rs5ZuBYfo6KQDwRtq\nfq7OJ4u4IZ/8LvkDL2W40dRrn/unRwsqOoFhj8leKsSpLymmUAq77QECF7YK\nueziuRpG/J+2zs1Go2wugjEkOlnf25XpbM6tooeqp23wi0k6p20LNd5CcqWR\nymiVFmDYc41S3QsdjSxgCZ2zhEZ+iYfFHggGDB6ynX1FxCepQIayaHCGKR6m\nCoqrVolU8B/WGYdWumIB6v+C/7XXnvodBz0dz0MdHzq36NS6802b/jw9eBsC\nfVAHXswJswKIB7f5TFU56Y8LOCCTBXGKiIXikv2Xtt3pyP1NpCOoZe2aU/Cq\nG2TkpEYOMDUT5sYPFEbGQnP6WM0XVHN2BG0NgvKrTKJ43S25ZRVhwd3isOVg\n0gXa7FL4t4ZGU9Bh1nzd0qLfA7bPzrogOrh+ZaGRtrIObwupqgzBV0uiiROn\nqPVv\r\n=6vba\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4mypaScTEpyyZ7kqxmLM4CcS0mO6XPdHScp16D0iMsgIgSioB0NXvLbzVfOtgsH0c7JAIqr1kk7pEOywP1Fo+Auc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-ipcrm-listfp-sdm.20190709145239_1562684133065_0.8586088858134733"},"_hasShrinkwrap":false},"3.1.5-ipcrm-listfp-sdm.20190709161701":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-ipcrm-listfp-sdm.20190709161701","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.0","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"31cd2e69a33fb56f9989ea71cb403036af915720","_id":"@atomist/sdm-pack-fingerprints@3.1.5-ipcrm-listfp-sdm.20190709161701","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-t8N9FUXWBaMiGzfG8JbmVZGIgqIJaxDmlPDvbSrM8JfLZ+DlkrI2qn9YevM+82EDgJwGoIYdf7QJtLq30gyU1Q==","shasum":"ad4c814f83d3f8bc9f8b53b58fdecc2d6843e1fc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-ipcrm-listfp-sdm.20190709161701.tgz","fileCount":93,"unpackedSize":1997109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJL5PCRA9TVsSAnZWagAAQ8YP+gO4tNKeXpf5jAgW1uQk\nEtuhsjFge/oeNrUk5z5stuw5s75P81RMeW7F7ezFJFasvEWKS4rspjr2VRZg\nrxSQG2NXHYhbIxPLRSFWpivCKqNigSJa0ghI2cuz7DhV0oVzsmoyv8fNXLxp\nGVKI7/6EadD74qGN5dkIzI47U2W9H32J1RjsutSDic0aBW1kOdF2K3WuSm6v\n4kufYKwYMonFFifd5yUCYTlfl3K/0rBZDr8ITQTlWqqnIAfaOfwRXY3VY/sT\nf5jLo1Sezp2tUJZWisSHXhH0m/p5H7dGzXegnDWUQPzcC2DyXQcDvLzGrxqB\njMG0iqteC4z5edB9NlxOjMBmknU8VJgR/eC0OMFspW7Km/hgHZT6eeP+2p4J\nM9WjDaG6MqhrAY/mtTlxF1E8LjOTiE2nvHFc/tlkiLcJfCsvOYHg+oyl662+\nxHPbqCOlCrK4B/jFYBC4nTRzC0Nk8g4ulfQ5RbPxWZmyFWA+qLIkYa2GUfR3\nW9oS2st1hCR3zX2PYi2U3O6yRPr64u+RkOT8Pa75Mz+pCf3UZ6TlWRmwB0y1\ng6Xm3UmWxL2oyORUIv7cJj3etNsEy9oA0uG7cISX9Hk+UNm2qitTaXqKvx0r\ntTeuOfmHJAfOF3D+SXgDBMzpvkhb4SxVJP9bofvILsy0EHUwGaaVvAMmCtf/\nOHxf\r\n=xFo+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICnLO4GB2O2KSMVJaUtUvAJ60uYBUScIt0aBnv3Q3cr1AiBuVA7xPUyxJCpww/pOi4Y6QkDjTmNaQ+12wFPxKqbcQg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-ipcrm-listfp-sdm.20190709161701_1562689103002_0.26945535761931994"},"_hasShrinkwrap":false},"3.1.5-atomist-update-latest-20190709164042.20190709165309":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-atomist-update-latest-20190709164042.20190709165309","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0d94cc75836974c4facb5b07aaeb4d55fc739d16","_id":"@atomist/sdm-pack-fingerprints@3.1.5-atomist-update-latest-20190709164042.20190709165309","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hOvTV+Bz5nhax7L0mM/JH+uVg9/UiB2piUx6mk1N9wmlqsuIJnrfNGB5Y6qHKJuGYQz6VZMnBOS4hFAkfzBP9Q==","shasum":"b3147b353482b62b2c814a0482ec7ecb02593257","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-atomist-update-latest-20190709164042.20190709165309.tgz","fileCount":93,"unpackedSize":1994023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJMc6CRA9TVsSAnZWagAA3/cP/07BGJHzRHFNseuBvUxU\ncqaTpkV3N9rK14hCZCdXT5yPuVulPoHwOT/xI5BnE/fNbWn0/WB+yWd7YfOF\nniJKooDoCxdr/0ygFNHCJHKwL1XnsrmSAnwXybtNN4DtxhwX2vO85J/ZXkGX\n/DEPwsARu0JIAgP0kPNN21P2PiGz/9yp7yZoERZL8JQ6lilXAzlD66zA9Ge+\nySUfmoEolxL/8kna5L2mUIPER+hXkgx5AS+l62lg/zG10QWQucaxFYlR4kst\nqVWRwQrIt+kqxfP88uV89OEmZUvjwBxjbIcC7fMsvirmeFdputT9RPU2pxTx\nILLb5ksHd/K5Knl9gzPTtbNS7Bwytm7ewhlNOiP2Ufto6aGEc8IJznVNvXA2\ny5bAsq38vzoYDxcF0/L5tiT8BTOrwh1n33nDXbSVP2KteusW4+RjCqsS5Nbi\nZVYzW/NVmF5Q7QXmFI1ylEQ42PhIcyHFgk90q0yhIiJEt62yxg7l7DblPNpz\nih7XRTBNU0kDLTLkI8FoaY3HFUX5KsqiuP/fTQRC51HZgoXUE2fuCcQfsKhH\nNpsSUYv+ezt6/xNNNWBJzw14hJNXkbL/CVNU9AFu9BMh63kGC3FeauWAJK50\npidsveazySX3u6FWMC9JD3i1SIv1uEgJhbWzZdMX2c5ALlTZDU3wjllkRl+F\nYj9C\r\n=Xymm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmLjACsREC5VGYpJ8VwpjSmWJTeTaPPU7p5mQe/KbcgAiAIIm03yViJmzy2UB8aGyjFqDm69+GRp461UcqasCOqGA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-atomist-update-latest-20190709164042.20190709165309_1562691385389_0.352877719106494"},"_hasShrinkwrap":false},"3.1.5-master.20190709171955":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-master.20190709171955","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2166e584207bda76f8a0f8b147a3c136c0708112","_id":"@atomist/sdm-pack-fingerprints@3.1.5-master.20190709171955","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-rdaMs3xpEnIspYP9RY9tAamvx2QIyb/ksfGRHuTD2hQPN7GLRoxRWKkLY7kUW6Z4Cw5/HvoDTT6BeTObUmhKag==","shasum":"1979a7c9f4278906ab210e97a07dde91562eb016","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-master.20190709171955.tgz","fileCount":93,"unpackedSize":1992667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJM0hCRA9TVsSAnZWagAAPjEP/iFgw1Zk3TMDVQ739e1+\nWE64cPFZQsXyp2HZtgVjFGnP6JLaXQuSfX2iXDasVownWgoFsSYI6Qcoxi3t\nqFJNChpNMikaTc2UAVd+8IToun0w7JSA66KLDml+JM56sT05CFzylCpzEXN/\nQ2XFAUWHHAqR4vseJJA16eHZiCeaD+Ukn8vuegWo+jIgpJ4H6HHEV+THf7rd\nkCL6APO7NNR9Jz/dT8NrZWVjfMBGqBHcoLlv9mri+ISQeDJSst1F17lb+WSW\nKQVpvVMjSOUBn63EddWnb3eX6j0STkV0HuueM9xM/rutXUMXfdFa9d8iS1aX\nUMtc4SxzGBsol9hDYi9zJOF62Xo4G0NDXShfHkc2rF3Uwe3cgN16vtvHBP9l\nB97mrdvqbhrl9rG3+PXHNTma2bFBY0rfZ5P3XCawBHgPsk6awgV1Zy8ZCM7C\nHjpBTzObVy+vLKOQfxehOpC1/vOVyABnld8i0O92LrjWOcbzfmUyOyxLOiwk\npK9uBrOxN1IjtaqTDgkKc7gjTTsDFZX4/3hULxklVR9pXys1wJpgKuKS3Ypo\nkshO3WGyw8Qz1v1lZw2Zbmyo/FUrXhZENjYurTqIV4vUTePWUVm9jn1FTDyW\n2UK4eT5N73EavCX5SrwI+IRA+NpSW8tKHch2fzqz7pWi8Ej0mjOsBSt/UmDP\nBciV\r\n=3dPB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICb+exH/0xYdUkRv2xkh0+U4c0ufghTxh+z4m1nJZT8bAiEAlP7OdP7V+MZgihhWpPwErDVDNl0sABGic8LovKCJiII="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-master.20190709171955_1562692897231_0.8416987148169661"},"_hasShrinkwrap":false},"3.2.0-master.20190709194412":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.0-master.20190709194412","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.7.4","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"68f2a5626df6363653cdcf15067802515d22d9aa","_id":"@atomist/sdm-pack-fingerprints@3.2.0-master.20190709194412","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-LoQXjV6JDNlv17K2GWqlb+DxirIW1Ziq6RwBGKakIS9kDLQ45SXCxl4F7MEfX1EldM0TSGqKfOmeTcADT4XvNg==","shasum":"88b847888809e73de017ce6ec24ea8cf2c7a1f2c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.0-master.20190709194412.tgz","fileCount":93,"unpackedSize":1992634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJO72CRA9TVsSAnZWagAAVtcP/jA78peGGl8Q6nAYU5CU\nHlFvlpCAGm2/nr3T9xKLlfLtPCcvq2/lOKi+TfX+YqoNi/F426KnuHAv1tIG\nvTp3Sv9kq6AXM1ntnFFUqdX2aXZNtPms35uNPGvUBFFYiEZB1IhRhI4631Is\nI+8S/D0MVRzmIeMXt0Po05ouRvrNV4pEMJ1SviVOJflDyj6mlU5uMEDgtuhC\n0wHTeHLgbCWGMCkaZ8h7XKIh0wQUmK+29tnW1fvoSKV9q/csVtbQa8fr4foK\nru5HTb2cvhYtzEaJ5tdX+hJWw9a4vT7CT+Qfv9fjHiOevINV1NzH5/9AObTv\n2hiTmYSj7ILpaIkzrZBxN4y6UOMk1+5xv8H23LfOVCx5TvuBcL/y4n13bs6a\nwNVZsXaM2y3Aql+YrIUFqbi/MmrpVrCtO0nbOzsDeUmbg4azV+jaH0FptBeb\nCq57DYwmzznbEO5derYpRyBOOiO80ahra/XKcDc20atTRJRSYckGmvDu8OY8\nOUKObL4pH61uW/wr/hyZCAieaeV4vBHZX9gXD4Gay0kIazcv+Z7Hbjc8ROtK\ngV4/em1bmVJNMR5PLkkrjMs4wB1SKi5xyWKS909bN9oYmG2WMpxk8/Iewy21\nygyxdC8iVwKk0loy5fPraEKfagMLPWRN7heG2mHRW96nN5rWxMXcfRo9hhCa\nOrRa\r\n=25De\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHKzxGfneTerubpN8LI7m8cBNVJqpJgoot/Yu8LYALcRAiEAk+BiaoN1iq8D+djYie3AixpzEYHDmTJtXOnyxiKQ3nE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.0-master.20190709194412_1562701557757_0.08330840875631718"},"_hasShrinkwrap":false},"3.2.0":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.7.4","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"57275ced61fabc8efef67188a3463f4577f1658f","_id":"@atomist/sdm-pack-fingerprints@3.2.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-HDMmYjlzEjWXs9N1pWkJwTQPAQBTkiRhHt0FvDkGWdfHlhAG8uUaUL2czKZDaAgkbKb3DfYuGq9a3JNa2YLWvw==","shasum":"76c1ba1bfae04ce7c803fe6857f801cc38e09fa6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.0.tgz","fileCount":93,"unpackedSize":1992612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJO8uCRA9TVsSAnZWagAANDQQAIge8p3xmeVid6lWy1jB\nHm6B8Nve6fH/VbNGn14vVKGBlgDV7EiqqsJWSi1jOl5udVHEyIUT7XolXVvc\nYn2vHGjJjuzzV8EkhqN6opnWlw7XG7y7xGLCQOFAwPfaXuEWTjkht3o7ntvu\nIDO4p1Oqr2GqFozhtnpsNbY7SbHQAmzwIxc8wes52fYXXmUK/g+g+wCDyTbB\nVlvtDkzE98B5mf9TVyPemuzZ5HG+LoaV+bN5aciiGdynCC7hSMp5SK1pB0XC\nHo4L07DsS0UE0xO9h7BjQB67fJ2U4xDLni4Nq97iH+Nlzgbdfr1o5kUvqqRL\nArDC2PQcVmtfZJW45zbvGMBoteRs8+Sg14rr9IS3YfB2xSQUT3v+xLTn7ENX\nTH8RwDJL4kIfYhaV2LF60iPr6k//tJ9iqpiu7TGmxF1ko7sfLHksQg8e20aw\nErUPd13ELiIzJyNBqO8nQO2bfMe2ebrmii5vrP12ZgiZJr+F8KRF6QouAKFe\nNhurX8vTSE5Y3rZZHrw6j/kEvvjempLtRbYYuw2PAS9r7Oo7u/lqeHeXkXTT\n5XveUawIohCIFozmHq3ig+ISaD3yxe+C/1xzFt/pJL9nJUVvo8f8WQZ1tSAq\nIFpV+I1MXrqbiH7MZ6SI56MTNX2IEgtHUhIv6U5HC3GB6FrhsRiH6bHNG5lu\n5bPO\r\n=vmZ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEX1cQTYHZoALul8tqgtsB/yCoQ8lXnAPOAZ3RGJONiQAiBPmbASegcjgjs2wdx/PeQjAPR9hS034evhAtQ7V2C1/Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.0_1562701614115_0.8143003016713395"},"_hasShrinkwrap":false},"3.1.5-ipcrm-listfp-sdm.20190709231251":{"name":"@atomist/sdm-pack-fingerprints","version":"3.1.5-ipcrm-listfp-sdm.20190709231251","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/clj-editors":"*","@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.0","@atomist/clj-editors":"^0.7.4","@atomist/sdm":"^1.5.1","@atomist/sdm-core":"^1.5.2","@types/lodash":"^4.14.134","@types/mocha":"^5.2.7","@types/node":"^12.0.7","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.2.0","tslint":"^5.17.0","typedoc":"^0.14.2","typescript":"^3.5.1"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a551a57b617b0e620626d65b29f68f7f8433dbb4","_id":"@atomist/sdm-pack-fingerprints@3.1.5-ipcrm-listfp-sdm.20190709231251","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-PNbY5s9LnNurvtsVoDTsbyuF+ih1qTCCLzzCVq7jLXkw0X4F7r+9ICaWbcLqNYbaeiYUyWIB4XQP5a8TDwCV6g==","shasum":"32c293def5f22b1d94afa812ca3517f5d2170da4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.1.5-ipcrm-listfp-sdm.20190709231251.tgz","fileCount":93,"unpackedSize":1997361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJR/lCRA9TVsSAnZWagAAERwQAIOBioEhfcpAczKd/rJ7\ngwtBTG3jEqeXEIWOrZWKn/3PQyJec+UYZZja+AyX/cbULRTtpakyuGHJUOKn\ngz5CB6fSFOI6WgBN6QSRVoNF24orJDoJsFxrSkgrEhIJqxZxK4bpdYC+Npns\nhgPvDrhOR/lH21x90UENoQGckita+uDJ/wSPPUCOzPacHJtdeMm0Lvr6ZxXj\nZpX/3SKxD+gD4lyxUbd1JFLKRXtu6lQC2wD+u7qEHGRsFl3+B2gsSmKb4Hou\ny8JeTgXQKNmRUuyAl/yxj0sC4tR1KMuBCzxGVvpe+lhnAPDyYShrEwnBhaxl\n097ZpyQZyTzpSjHBfdnA1NA/Pq2scZAaP6qAybpJBtwljtMwzYzEbh8+Dt66\nTiHaesZWCIr4arYBtEUl0frt8ej/r6kfK3HnG1nAk+IX37bp+OKG222DdVzB\nJEC07qbR2JvzDHCxwjVnrHlOrL4p9LcXcWwDuvTB0P7YWOkBvLvjsd8EXEDE\n5KPohnNs6W9tkivS9USxKZDAWks4Awecfsrl6YjotmN6Io6wO5GaH6rF6xM2\nxHMh4SB0QDEWC2QCgBp8gfW1Mnr5NOMEsS8wQ3b+E699ISwi1J1A7wID6EnP\nCjaF0xiQtNt2+6/QjX5yHW+au/S4o8eWORopC+ev1hmQMYSyL8wjBAQsnpRZ\n5bj2\r\n=aBOs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt3/wajUHqq0WOGQL6jXrCk/O35h61i5TvKkamW8MVugIhALS0zMPThzClDxnbcnpnDMxPvZDSoS+Kumc6qB/lPYKM"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.1.5-ipcrm-listfp-sdm.20190709231251_1562714084895_0.13412239980090912"},"_hasShrinkwrap":false},"3.2.0-cljeditors-index.20190709232626":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.0-cljeditors-index.20190709232626","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.7.4","@atomist/slack-messages":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6e3f92075fd0771b67e7a650fb8def343d6529cd","_id":"@atomist/sdm-pack-fingerprints@3.2.0-cljeditors-index.20190709232626","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-90wwiM4XeswnbxuhxoT25MN0GY6IxwJjNBBNpCyp8Ff02jTldDDMs+cdP1dKCbQxTou60Bsx3M32iyJANH46cQ==","shasum":"ae75b4002ff1978dd04e01e23ffe338cd2ae633d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.0-cljeditors-index.20190709232626.tgz","fileCount":96,"unpackedSize":1996531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJSMcCRA9TVsSAnZWagAA+pAP/As3LoV1fDrYtM4HTLGD\n1l4vWyFI49BCfJY3I7HADSquw0VBGE3VCCe2tsKCkasAAwhzxruj9Ey406Wj\nftGz2ZFd5yW6Q0n9zhx/sdtp1QWFrQjO3bVko1DwpjZLL0gQhHZyCJEvst4N\n7fgwL4JDfNPNM5J6jqyRG8Q+ClcIPRNBbFERey4fMPEj5LNwyFJfY+6LEEvW\nFd7Lbo/kVKRSwLRaynGYRjsGHfhygPEEM2Xx+2vxsABbJXwSnt+RBdNWGzjZ\nAQUZy1lIJ2qR/9kX55v3bJs/3/az+gi5SOiBHoLA8U/iwjb3J6PW2nueiZCL\nO2o5/ewlBX3U/mmX0tYqtnqUacvGXqHtBzMl26e31PmiP436GG8PdBNP4Fkh\nW8uzRpyaJyIygprvO8qYAp/kH1ss1ymRWepnuj60O97rO7BwOaQ23OYpRRa9\nHjofRvbh01/AU6E6W0xhTTs4FxdHvfQ4RqJnmQ3m+pFEDin6Skxp8vJJtFPm\ngVTcdJhQ77jd+mRjSuMMtPWwaafJd9f+BgQ3OWlo38XGAi9f4+2Ao70aRARr\nrAm1wbjeZJaIvCWO1+7IMqeksCo2UkqZtSUGZn9+JrPGrSnkbhd8VQ50pljW\nVifLm4wgeBWfDy3sqUuEfw3/8+m+LI6hHvnTYODm6P44z1sauLczfEwkmiRB\noXiV\r\n=Tf5V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLFrGHC069M+5y/0DvhuDbqbxLOMCxAGXHhDJr0kWt6AIhAJ8HML28OAeFL6GIjmo5dxoKj4W+C4RGbK8syM135j60"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.0-cljeditors-index.20190709232626_1562714908273_0.7829851595021105"},"_hasShrinkwrap":false},"3.2.0-cljeditors-index.20190709232706":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.0-cljeditors-index.20190709232706","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"^0.7.4","@atomist/slack-messages":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6e3f92075fd0771b67e7a650fb8def343d6529cd","_id":"@atomist/sdm-pack-fingerprints@3.2.0-cljeditors-index.20190709232706","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5UNC9FKXJjG6svB5qEvJuJOkY2/coriqiVqW1bo68TBwcaCGBHjEOCdbHNqybZwVCnGJLMgCncjcAcuwV79/dA==","shasum":"df667c1af5fc45498cca4c2a5f3f9b2287a08dde","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.0-cljeditors-index.20190709232706.tgz","fileCount":96,"unpackedSize":1996531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJSMkCRA9TVsSAnZWagAA8uMP/2wuLupmznpuQG2Obpgf\nAmBCDfJo/na/i5LzjMMEHXMH0spNAyjCCJhe8ZFKcKYsxFQ51ud4eggqTlUo\n5s2EmJ9EJnwU3A1i4u9W5t0/Hxr9GExHnGVVwuNxb6JfH6sC42x9E/V5yxF3\n/iHaM3fy/6oEnqbBJCZGmdpOx2eitCU1oCXJYSgUMHe9t3pSwnSC+/3dRZgp\nRNDiKn+j4aeqMF7SwZZBaL6aVYxrQ9BbbKEQAJfZ1oerXPAR/zHR7FHOgAyw\nGuUpccZQuykrSlM/XLHHghtYC51h7tbyvLYUp4ntlfjhzUmMYPj9DER7Z+w+\nbCaI77VKIL9wDllliJHfPb/cEFbKDT5nLNA13Drfucff+EhdVLvW3hiLJzmT\nr2qLF3DE7prAo1XG04sWQrEJMHueY/ecXzG3iZXTHIUF9eelghJ3JLloksAF\nv/c91SW/Y5jHDqw2ksOktblmE/jkF7rIBKbNzHww4rza1HidRQRILRSEUqSg\ni92do09JQkRcWtKpKv7YHg88K8GFYGdDZu/JZgJBkd8lBKtpve5paxzSmh+h\n3MkkwtqLB/OtPhPO21C+GYYCK3NopT0V8S/KV0yORgcsHwIMDX5yxJk6SXDb\n7HNxMdVcWGsgAIiIHTnHjxe5crky2CF34ndsutHbZZS/7lPNrXziWEtXOLaE\nHmKz\r\n=w6YQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFnJlYa9kgH9YFCri5O5ryArKkyiAem6el5xOZznhvBTAiBOKlP0+pCZlX6Zbq06vD+49pPfbvHRm+oa+6JEXZZ46g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.0-cljeditors-index.20190709232706_1562714915762_0.7549066212699531"},"_hasShrinkwrap":false},"3.2.1-master.20190710025834":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.1-master.20190710025834","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0ec6df895b06f8d1fb2558b2aa33da8f4f69fb51","_id":"@atomist/sdm-pack-fingerprints@3.2.1-master.20190710025834","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-MiAIvPVVuwxAFFjTpevWruVpKU5T8W9YPvJHfl426uydPf4+IkC47kCdsiFo2qpsDY0ZMwKqkcI1w+kZ721NyQ==","shasum":"baa0f9cb08789639077774ad90e5a6b423af6f86","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.1-master.20190710025834.tgz","fileCount":93,"unpackedSize":1993070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJVStCRA9TVsSAnZWagAAPa4P/isGoQXdGcdl6Eh6eX4B\nvSzmyyjzYmFU78zu0vGKj8Y3F8jpIiQt44Tk3uSHcK7u5rlrYvlzumxO03ub\n6clhvqjGDLRzbY8VDb2pBS37lif8wrDyijvLSx15nXqsegVzcqN+EYBT+WQC\nn3yhNV4w0jSNmlEkklR2r5ptck6y9FG6tXCoI1k4VEr3M2fVStSdG3O2aRM1\n71bAuzK8/Aq+eo1Y9mx4228rVXaXAM4IrhXDVcJWnbxRfEkGWVhy6qbCfKtC\n/M10TNUlbsbyIxZcz5lJo9KIScwHe1/N6fXXggXQB22/bhwOjg0CifXESrP9\nXWkUh3hwcyV/wR37MRg1FoOx5Adu3MY1dRfCeOp9VNnOmjs/VdghxPmJU2gx\n8qLdTYfWxUORIj/HkAspcbTMabAPOrwTfmqJkWG7BqercGTZ5A1ISokd4hRe\nCiI+T4/b2nbVvB+wJrrkAQZ7a/q5w/6XmPccJ6aNLNW184xrnOJhFfqgbnwV\n9RcsecqEXc3pI3e5LcX8guBQ6N0ytDBzXKfH0IMdJb4oOzuTdIMqYvdhtJQn\nPJ6AXAkOC57eCkt4IQ60bIfRDke6jP194ozCYqrhw+6PNF4WExYNMWmMWalC\nA5wgxgjdMl776Q0TDpctCoPnYTPSCnU8GPm4MGTF86eGWo+Tfv76XzcsSEDm\nGn2s\r\n=GbJE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZt9k9C9Hc2kY3DjMMBXhBy1Q0tuahawVe9X8YG6AQSAiB1fZnowMA8KfauV7V6yw7JuT65Qqv6DWB4in6c/M8Peg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.1-master.20190710025834_1562727596257_0.18829416189395354"},"_hasShrinkwrap":false},"3.2.1":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"f9a9cd42967754af0844c793c79b55a5ca81009e","_id":"@atomist/sdm-pack-fingerprints@3.2.1","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-4w/T2cHeqt6FMO/RW1ZY7CjekakErZZEuPydyDJ/AirofMUQf8tiyFC609KFrM4LyPD2k/OZ5+Y59kggkRnLwA==","shasum":"00c8ff6cf45bbaece6e8dd3e08ee77d1b94bd1be","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.1.tgz","fileCount":93,"unpackedSize":1993048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJVURCRA9TVsSAnZWagAAO48QAJn3391yUqwNGdVnyBHT\nVLR0T3Xe4JKfHfRhsntry4lY252Pga/wWCZXqEUdf/A4VQmqyiv/HuQmb++D\nkGCdzSlgrj8kWOozcWPie6JphcbqXylNd2zJ9TneW01ornExbKwbu6JcqNAY\n6x8qyM7w9RtC+B40x5pFRDxCf9gt/17c9ChdzPd+h5lx7I42DSz1Bi5Q0ENl\nLWDLUnGzvWyFhVo8ZhAl1TsWMQW9NQmbByaXLbEHHJN0cn5kvjQzTB6VCgzX\n8a33OGiwV4ELYsO4g90Tho65RHUDcXFJNvWlH5zEaJFAZfNa6rA4L9FEUByO\n/8+uMboBONBxgFtNfGRK+N/LYy1rdswaiP6xaM5iAE+CnwuQkNbRQriLEZ6g\n/k5nZDNfmVsZVJ2l7z6BoG7zUrnW6mffG6vE585kqVn/IH3/NeSsKe3zh8FF\niU5d2DXBaX3FFF8XAAi59xL1vIkIf02jSQsb29DUi5Tv/L7dPOTAp1C2U/fc\n/v0VaqWeCQef0cJAdQvc0HYZTiqhahfw6WuxhC1WpjYYm2pAQUeITqps0fLx\n3du1LALAn89b2oOMM/p9JfDiB1n3usKe30sjvZJNqVsJXTYVSqVKcbk6lKbk\n4DDvTbmAMKrwvNQhiN+IfR0vMRMlzZVv3jFW0/5dHb6tSs+cZS3JHmo17W46\nYypj\r\n=p0l3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX/NSgkYFeNCtE89DlP6RVPdcY33hxunwfK2SUDc+UkAIgT3Z6ybN3xH+Elkch0vsLMLexY1iu0k4i3qIcuQoLKcA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.1_1562727696536_0.7273220972329493"},"_hasShrinkwrap":false},"3.2.2-master.20190710050726":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.2-master.20190710050726","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9181433b6d7acc423453e9db30e4536e08b13e98","_id":"@atomist/sdm-pack-fingerprints@3.2.2-master.20190710050726","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5KWwSs9dQPHvghlV6b3QzIWdPEdgLPGmDzNqBxAaC2znOnpsuHhPDXA11W3Q7CNt6TwGdxHwJuLuj6TG2NBNFQ==","shasum":"a315e06a134a69ffe95a2fcc4649a81cbfa65d43","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.2-master.20190710050726.tgz","fileCount":93,"unpackedSize":1993449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJXLbCRA9TVsSAnZWagAAfE8QAI7Bj6g4GvlRLGrxT9Pk\nEorOdPebaeMi/09v27A+lM00UH+J3vMxpq/fomn3ZCZxgPtes2PxiLhm9bOG\n0GnGclmHV2JB1FRmqA7lGOYR//+DTTRkNXZ3D2WTL2lfa3ZcOKNxUmtPCHP6\n9DGzCA67weuRFSC8GxNR9ysVI45bI1c1WXh25PU5c3PLJkIHNrnfPGxQhPBr\nJ/Kj1ksmOgIRiSXw5yJDYGnWPyMUJkLBNfVrVVCRoqRTCKeX1x+/a6qyMShy\n1svr3FWoSOO1ornT4Vs6jKbkHH+vBZiDTyKsJ85U3Xy4dwAcsWbZV7vZ6w9L\ndwr3uw+wL7M/Al5Og7REQR/xbloLET4d/tTWbbeB5jrFC78Afpvc0iCCv23r\nqcoMZl2rimxVT3jqPTPACpGvqPkb6lG8V9SeizUOUZzNek6ndWSF58On6MMv\nCwvFNG1qVlJyoE0WKYaUtB9AMb/P67Qfu4l1lZNKl9eKP11VJb5LVMqnQ4iD\nEBVcBSjquFKRLb4ij9NNe9IiexuV6cMQ+L+RKn2TIxAPbvQpVxWOdtREcewv\n7lZ8yr9oUwYs5IULlKhwB7tRY3HHtxSMfwnE8CC7T1R20/l/VS4Ab63BA0NJ\nmhmcl9OaG4dW/3bQ9I98k3ijCFL0Q0EsoNUa0KX9/okmJc0rLohJff+tbV+u\n40+0\r\n=qjBO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW7j2xNSHbmLsJe9tPl+qh5/C0mKMofGZMD7mqiqTR+wIgDH8GU5J03UfU5/BCj7o25fmvteQo1t1n2w00AL/WCKw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.2-master.20190710050726_1562735322927_0.963108069531265"},"_hasShrinkwrap":false},"3.2.2":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"3c9cde5f3009a3b3eff7e908eca09f70b1b54b82","_id":"@atomist/sdm-pack-fingerprints@3.2.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-36vKKNasAsC5ZQc/oVdeiLpJz+C3KJ1R9VvqHzCEGcPQe+vQx7e4zZA6v9FiTORRxa4l/4sTDv/nw/Hlw1yg1w==","shasum":"e29ef68e6ee2c6c1c0fdc735902d08b2cc7004c0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.2.tgz","fileCount":93,"unpackedSize":1993427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJYWxCRA9TVsSAnZWagAACBEP/2UCw2woAzBLHQ9NrrON\nUSxEiKAiSXqNiul8EwDKpmI0BqrsBqbQboxGNGCePA5T2LDwrtbHnBRxHntW\nRnfLhc4MegL1lEqna5H4krN8wU+nNSkS1biBR09um7sVeYbk7+6eRyAW0aqJ\n36vw6XcUzfZATUhNqmNNC1vUJTUxmA/aEPKmnX7iWJ1VdF0VMfhDjoK0N0p0\net1raFQaGH9+QZ3JFe2aLUZitqpfFs5IYOoxFZfvUFuKxaRWDxZiHIBQLRyy\nwqEq3x8pVUScAX7PsbMfkW33dWufuo/dsU85OJab0q59MVU3kWZDxIi4FA3i\no8JYUUo/w23iT2GKYhPcViJ1GV5Xd+7B8Fpz89rjqci4GIOJbmFB34WJUmB+\n1ngFr+v3O1FTWNE5ShsDXo0cF+Q/5PpEHlcMeMjjPw9IrKN/9p5bI9VAmuEA\np0FGa5xQJpMb59HBNhA4iEyfEMvsrcUDR17h1+3/U22qFInZV/1x8dLeBaiK\n2ky4iSvR12qakre4QI+I6Q8tx60+HFEN4zd4qYI7x5BsxkigNf+kAbfAfd2L\nVTHD/tmEUYSgS7aYVJu2N1qungzA9Ct3RMqkvtgNFQs1KWlMmhEQr5rVeEF3\n4FKfrZc5uQMSJYwqunwtMU4lWme63LLiW/PzTwX0sKzhUFTC/7/rlKA8FzWX\nqEPD\r\n=tKWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSnb8z4GfxK9CsKLU8OATzZPyn6tpZr18WVrKbzaTyrAiEAgQFv92E5nTvRZoQ+QXQRRcu2v3I2mPvL2iUCj6h1cKw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.2_1562740144609_0.9998286714051166"},"_hasShrinkwrap":false},"3.2.2-nortissej.docurl.20190710151425":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.2-nortissej.docurl.20190710151425","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","dockerfile-ast":"0.0.16","lodash":"^4.17.11","semver":"^6.1.1","xml-js":"^1.6.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d18e7b7533bb672afd07fc3c4c832495d155c7f1","_id":"@atomist/sdm-pack-fingerprints@3.2.2-nortissej.docurl.20190710151425","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4vVyn8M7Cqt3MtpvZ2nC7VlBhp5cC5m4vS0pXV1l4f8rdxlv99brTIrKqFOIaKe5tFa8UYNOgh/4OqjtEjcnBQ==","shasum":"e3e5c98fcef276b4342369341c4932270aa56805","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.2-nortissej.docurl.20190710151425.tgz","fileCount":93,"unpackedSize":1993578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJgF8CRA9TVsSAnZWagAAvuEP/RO0eLBP6mV9wgPLpfIF\nhYETrHu/FZofSi/hCYJrwepwPHaMeqINSkjlMglQN2bXF/yoRJKVt0k+TA9x\nFhZKpT43dIuG3hnai9ah11ss7mRswq1Mp6+VDJ7LjFHfwFG9TByRw+7+HipI\nJojOLQsw9405Cj39wB6HcxC6+Ode6P9mQ2lLnUyKTP/Y3pnWb1CXEkaVnYXt\n0YzZ0Q831b2G/Ft+L80+MdVoeVRfkUkdKkvVNnALaFkA+c+1IEqNggTTCxRw\nLxvIeUFdtgC6IgkS+pipO9ZNf+kZu1OjW5TUJNUaK3pP8dBVq79G/MlhoK7R\nzwAHNwwycKJRK6MwL5n7cX6G2eJOAyLZ0Uqsxww4ZhntBZ1HmARhlLZcC7Qr\nWO7BnLbbtS2auGS18T/2gnNJw3EqrAsFKC2wrNjZLRjnX0kvwcgzSKytgE+1\n3DrNYOZtnJhVSbADrJ8P3suWU959rkwTuFqV1CX+RIjhwr1mJHx55xDxxqzi\nzXHiURIVr7yrqNgwAAGvl6TWcGSyGass4owbTzChUlQOfNatY0YEzFCuv939\nG3XuoAPoHT1cIMIccT0WLNpYyfjynmtL79gDuVIsS5eYXzYX88B76L0DyQsG\ncvBBz9VlALMoYJJ99MZuMi5USGC7yaZwL5KSiXIWE4vAM04TrkSrfye9n/ze\nDoBF\r\n=T1b3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzVb0ropKO2ZdIDsLxDzozuEGhnpGx83BogPlSFU6vUAiEAj3GKIVVuLQNKRlj16oBJu9S/B0d3+Nbfke/LCNnO+XY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.2-nortissej.docurl.20190710151425_1562771834399_0.829606956777754"},"_hasShrinkwrap":false},"3.2.3-master.20190712040952":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.3-master.20190712040952","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3cfc6577c0912c40bae3acdfd4f4cc9231c957d3","_id":"@atomist/sdm-pack-fingerprints@3.2.3-master.20190712040952","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TLeM1tHwqHBREZQ6S9p4PAHhqTOyPLeizCrwW2rZ9D74a8suKye2PTA/EatoG59JgUeCaGrM0MfZm5ISv/BR0A==","shasum":"d9636fd2cfb039cf2814c4146fcfd27f5cc46615","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.3-master.20190712040952.tgz","fileCount":93,"unpackedSize":1993947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKAiWCRA9TVsSAnZWagAA+O0P/ihcfXYMzEeRb4aOy1+U\nbUSz+81tvpVIhuPJn8eXHqhdcJlPkjkflulOpKpwVj4L9XQNhD5nf+JSkAa5\nrlv3vi5lO57MAbsVdK6628rnmlZhsZaSpN6DdAE7ZT6qnHomHeny1hYMm9dy\noxJMWCEyfu+54itU3R+TvQTD0hY2nzJJshIs8Al5nr4cwVvTiSPuruRaSc9v\nEeu0J3TF6rZWzsXtP5NjvXjdNiATOEV1+Z92FTTd2LTvMiBKSWLSikWuQCb2\nb+TDEBOGcdKa3G3gHGYj0wyiBYie68C6PacUvxdXSs3weOLgzFS1OQh6WD8u\nMcwP2hj4cEyMK1lAqx8RWjFzv+2hJGwmlH3qvgEl5R+mghAQWRJmz2C006MO\nUb+6ePIIGN6NLbxH9WdadL7nctO2WDh7XGN5/LsSmvmAGwyAnUlWDFqT11jt\nMTDU+QKkFC1pc5eac5+g2snN6nPdTTEAqKrOTh+6EVs61ib4kFWhsH/6TCkt\nIjyJfoIeHilESUg0qHsT+d/8QRhgNQbSGGQ4fk1y1f/Mm+C1ditg8lROQn5N\nxaJbgruN9KoRcfbvp/1FOJEP7NcFKE+Y4Koi8PXmUuvRNzqy0UsiJ/ydwCGD\nDHsmQsqPbZ+/NvrOAGhIatzsQwPI3+wqyMtx5UGQNMBFygDxhTuOXKyji06o\nakeJ\r\n=dFSq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXdl9rakNXwUsSyOBiCspjVrsqwNHbkv1fQVsN7M/H4gIhAJkhcAh7gMiaspH2VtC2PHtBu3yN8kP9LcT+fDl/ndma"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.3-master.20190712040952_1562904724506_0.45566789334987035"},"_hasShrinkwrap":false},"3.2.3-master.20190712041414":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.3-master.20190712041414","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"044de869972c1f6ae33d2b0a666755d39fe6bdfc","_id":"@atomist/sdm-pack-fingerprints@3.2.3-master.20190712041414","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xQubmxp6ardcOck59wc02KvF4t5WNzfl9i57B+kVfpuXC3ulkd9LBqWmRkCD6DiHgccKdC2hd/OrcuEHhhAFvA==","shasum":"97b279959c98c2ab1ed451ac5de8e0aa197a6511","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.3-master.20190712041414.tgz","fileCount":93,"unpackedSize":1994098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKAlfCRA9TVsSAnZWagAAHj4P+wZNSBkBRNoYHbtz70tc\ntBowq4pZKu82wVrk+peGXYAOdtQM4r5OowTEwTh7L+haru8FQbZB8BmWIN5W\nf8/DMj8XeZBbdfYZoFBe2C55x0jUac1lcyO4rwVeZFvrKdP96plbzX63EBRu\nZidZUbAZvJOLhdt/Kp0Lw6fdB/X40jgkkpf8Bye+HPx84WbLm4KmuBkxUlsJ\nrQyGNR70neHIHfkoe90jlNws9cidiutBv+9U+U0wZvwq1aLoMFLuLdZBnKlM\noz4Ewed8zu6UsEmlN9kzk2CGDq4lbsZ70jjq3vGkuY9UzQsZJ/surgK4yEJk\nSLeZGyJf7WolRFleEh0z3ZUERpOXtkHWoiIjKn2KVoyWoPzhKjhw81yJj92l\nEyj4SEdkPRAmiglB3snUCzWedythUQMSsrOa9r6dwyqkxGrqtj26Ifl5GSR+\nPwa2V7o9mCAAAkahZJE2kTLQPx6ocTvtEncMGE4tGZRFpSTy3FbghgQ5HxC7\nophL8JGr6N01ONHoRvRiLqdiAYYi3pOjJ+09EESsGgvb68In6HHyjCVv5X4D\nT9Zuz8yDdlDC82EhGmxpgzX0boFRynv5UGLnzxEwPVoy4mgJRZxKZfuXuuJF\nmTqvq1fGN4gVEbWNPiLQpmq53Rudq2G8QNuYzYDzvZemtCnIA9y8uD/LmQ6O\nWNjg\r\n=er+7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCS/ICWwE6KLS+luJVUVC5GZcG51lnVTgj9faVEuJWllQIhAO7xWsPt4VpNdm3Msy9SehCjUDTA0cRXg979jSfldOgH"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.3-master.20190712041414_1562904925661_0.27999105413375003"},"_hasShrinkwrap":false},"3.2.3-master.20190712041903":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.3-master.20190712041903","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d062dbf5d0d59c11842c6293174ac54f1180c6af","_id":"@atomist/sdm-pack-fingerprints@3.2.3-master.20190712041903","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-a89hgKbz67odZeYYgnI3YSujvNwOWUawvuSxp0S2SryfybJJf1Wx8zjVbsMfFhlm5U8nnMchqghK/h0a8Fdhjw==","shasum":"5f0e472d0fe55c7c2d4276cabf5f4168997c8c26","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.3-master.20190712041903.tgz","fileCount":93,"unpackedSize":1994098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKAp+CRA9TVsSAnZWagAAU/QP+wdPGiAa5PejJ2yWVXTY\nYVzTUyDVS1t6v/9JSqKHzlA+0avrAw2PoQ16Hn5RNtbN+3bIT35kenXDmJzW\ngq4ISEIMuZI31Fyv/ylJPH7Ec7qpWD0MYyWrDvXLysdzQq8x/6uALHdmR7lK\nk0C9zM8X8piymTfJqQRw1kdgg6eDX+B/MdodP/4vtqRhKRLpVGySlqrzHY0+\nGwW/OrQs7an5zozIhzoDzJUafijr8yEaLHIp6WzAEUgvdMJRRB6TPpDykYad\nD3GcgIEY4AC2YqPYG+Hfr9KiolOWGmRCk0YxbdDCs4NcpmPvY2MfnOpAUknt\nbRd1is7TV/eeGkNjXsXUujUpkVkmzc4TAXQmOQONBA2JiK6ib0csXYVn0suz\nC5IYjwTkXMfgrg/Tqm66efz4x4oqel0CCmlt5shRmMTOFzjHNglMKy6MJEAt\n0HInc5p4ynx4B0I876+w8ioLf5cuLigueDKcTeVO0hGWZwICcPNSjFuw7+DH\nKdezT6dOYnhxy6oks3ZnsAZfLCBv3y+2gvBNW16RRm4oantXrSswOgZsxp4c\niGXWiZgsYFkEolNJjj9HnECXi673KydQq7zhzGd5iQ6NyWr+VOJ45EM2XmmA\n42ufxlGfJvoVfypmLTAevgpoASBe/3REs3OiJdzCZl37f0YrIWgOrjUAVWW6\nyhA5\r\n=mVo3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOZB+6CxURnDFLGMdh7lYnN/aHPan6KPjJwOaWC8UaWAiEAtZhzXSTKKJxm/IE0ekph7+9ZaMcPQ4/fMspJNGQUk9o="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.3-master.20190712041903_1562905213805_0.6565786304732264"},"_hasShrinkwrap":false},"3.2.3-headcommitsonly.20190712225544":{"name":"@atomist/sdm-pack-fingerprints","version":"3.2.3-headcommitsonly.20190712225544","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"27bd814aa29ea4e0ec30f8801bb79137bd678c43","_id":"@atomist/sdm-pack-fingerprints@3.2.3-headcommitsonly.20190712225544","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Q9oICqDgMETG0ZOfVPpi0m4Y2ENt9bgmx3HlBN6x9N62TYlJOX1GUfR79G5c02jVZNiYc6Fbcv0z5lWL7gz6Ig==","shasum":"05299e4fbff8ff6170c951d0fc0056c8311f209b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-3.2.3-headcommitsonly.20190712225544.tgz","fileCount":92,"unpackedSize":1992882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKRA+CRA9TVsSAnZWagAAiSUQAKToBhjHXYGC4XhXrmE9\nM8jWmMkrFN0OXBE4b3mBBHZPscP1PC+gr3MRCCpHJNOwuuk/zC9y3oThLEi1\nk4iPIB6cXUCKPZwburodHxzfFg9hafo6QnexwPoAK+Uv3fvQVn5LHA1dQyJG\n2U3SJZ7QA4Bmvo6Zb41SLlaX5d6ROhElI4qpaiXuykpUPJz29qK7aUebZLLw\ngVAP40Ch9XW6nvRgjsfMxK9uueM/hv5hQRZGhH1kObs0IcmixpZ9iAAvtP/x\nwazOeNDaCwYdAPsQhccppjO0cakvj0RUzHPPVPd1RZhB5qWaOztcizCHxhK4\nPlApg6QoPcDk65e3lYjGbaU/dh0iQpMd2+jQ+wuV3CMB4HpkUebpcov54G//\nG4dgDcG1uNrS5W9WU7LE1QZ3RhSGz6Is/P9kb6gs1n+ACBsZmFk0WY/Qu3kC\nFoxl+2wDJKzUvgjEmje3Q9o5uyO/Y/n+MAvOnC/XVVcZEEQWqoLadMcHVPTr\nCeHkMw/P3Th5q06WKhwnNaNYuxPxpH1UhkAPyu7NiviFME3HWkd+dPW1GRqj\nFGCZfKu1dYp9+vUVfONVKQ/l0m7RKsEgh6F3YztZjpgNeyQ5VBBDgrdFQ7Y0\nU2JjRroEbnpIo9NRBvQyfdo+QWrFLlmd/9uIgKrP+T/DDgyrrfF4xZaPkXd8\n9IcW\r\n=2Khi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3tFVOHRLd+dSMBFQvAC5x/okMzbFLLfdwq9BgwXEedAiAaT2kyacYkVuQIcd5NTnQKr1J6mlHC3ZY0/6Hdqt1z7A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_3.2.3-headcommitsonly.20190712225544_1562972221531_0.5563420817191069"},"_hasShrinkwrap":false},"4.0.0-headcommitsonly.20190714151945":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0-headcommitsonly.20190714151945","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"29c343aa2bdbba014e2d6c57424f4c00cafb1747","_id":"@atomist/sdm-pack-fingerprints@4.0.0-headcommitsonly.20190714151945","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-h5GB42xy052LUwPULb5ZD9cFibeUQOWK+p0Fv12NjuzJYRBMF25PMbfkwaNrcqx5CpJKKBNkl0kDiBx2S5Xoww==","shasum":"92e188ee044ac928af3d3305910d19c84aa330f9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0-headcommitsonly.20190714151945.tgz","fileCount":92,"unpackedSize":1992957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdK0hVCRA9TVsSAnZWagAAhEkQAInGbYfKTtcTHxFaUvAo\nQPxjHmMoUAhRbezUL4g6FopDTDlLqRgEyCKnRNmUx/dFmGbtVzFCtmZOKfaC\n8aabJVbm2WMSStY96QmC4UOANb7zI6RxMOzmZzROakVkgnCnE6aKqrXaDu0A\nas6DYjJu9WAwQWtDEHXZzA+H7BxADiY5hh2z+A1ujqkR7uwdI09PCAnYvjgx\nGbZ169RbVF7cxF6koxD7jZfOazdVtvY9pYYKaRA1kcoW7vHKbeD7VmMsJenU\nCVdAW1++LsN8txnNc4aHsB6+gH+FqjmBIZm1r4YRDY3NmRqGKmidFyHaAoYG\nqaUAUOVlv/G45sc/icHfkMo/wCT9X5UuROLEwq3jLCZpwGf4OPBGPJ38xxid\nt9awnoME4eFolDpY8nsOdhzXxZ4iXK7uOQEU434cyvxRnlkFIamEuFK3kgF7\naQPDV9bnJJpBUISrH03CmYk53evy03Uhf/D0rad1eGWV9IRv9zwENWsOKbRp\ncN84EuFl2V2vfomWZOWnNkV+kz3Q+35Brjtnlxs1SR+jOfuKGKkMiZCMm0Bh\ndD+jWmeGlZ0/uVpz0pyqRTcez1anMV4RNLk75xSdSdNEDlfYhiBDNOR1meGo\nyL3tHpSR2qDpDB3G0G1D6nLXvPMOutFBbSUjJW4In/hkrhpkOokOaEbWTD+4\nG5Xk\r\n=u6Fx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZaUEDKa4hEV8c3ArF/Y5ifDY2l/tOplWVf4xueZA2AAiBuCzduCHxD+l7yopfpJExANYrCs2leX9wj4i1TuFwxQw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0-headcommitsonly.20190714151945_1563117652326_0.7825950783452806"},"_hasShrinkwrap":false},"4.0.0-headcommitsonly.20190715182938":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0-headcommitsonly.20190715182938","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"82b5b985870ff8e019f9065c18f54995314050ab","_id":"@atomist/sdm-pack-fingerprints@4.0.0-headcommitsonly.20190715182938","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Xy0DYJ9McbXrC7DDC6Wp1hJit8F8EJZ+GMp1xn2X2JVswLJo7R4nmS7L7T7wfzKwEGbFgOFVY7ayFo8GuA4/kg==","shasum":"e17184de6f07d782af7db1c83ca8b8a1f4da8b3c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0-headcommitsonly.20190715182938.tgz","fileCount":92,"unpackedSize":1993210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLMbfCRA9TVsSAnZWagAAS+QQAImNWCEcHcA2eHOhcTP/\n3I+diyxOPZbwsFCphtyXUtoB/+cQsbYPQ6ITngcdYxJMSZ73K+/yUcdvrlrB\nS33UbHdfSvcIevDHL6rwNsOr+dNJEVEbgQnKslmk5e6nCcNb/ns8PuET2KWY\nWA+ROUjx/y2ksrR/3VgPGiLqLMexlRWFHNGO0Su/7m+bgfe792rT4sP+PeFA\nxoTNV2p4Dzk+ydANfxVRoLy6BepVQC6ds7BO8G4f/imFQ8ULgUg4S1s8Elk7\n1grgY26HSZjTH/pfw2gpSNzznCubD/WfsWIBt3vFZfwN28BIHNijBudm4eH3\nRXjHFlQFHlmmQVwYITlWoXsrNxkvSzXROkn1ThHbbap0ogWHaYZBZ9xZCDVV\ng/hZsUaB4OUA9KJU2KR5dVSdwhmODV2odNQRiG7xtg9g/6rQOX7NwlkQX4b7\nqasQgNoWLmKCy0u02SxSoyXu36jlJwfLlNh4EAokkIuebAScLV6to0R0MqSR\nkMjlBiQt6oDXIpQfXFUESWRPy4txIjoskLNjddL3vMZgIvk7R8HBU2oE25e0\n6wk8TWb80k4BFVT5SGZuU9Z1BSh7AsyYMfa37y6aT03DgWUguHwPPMvxmjZx\nykdlh6AOVhjP+S1LcAtz1B3yYc/wZTj1rwqnAgwNPmjMRmQdWL6URYl4DJGW\nye4j\r\n=hGm9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICg92BHrm+4QdLjfCy3a0/5ArrfyKMvW8DrOc1I58u4+AiBsZuQRPhSgONv3A1afmlvU+aPHsvZ+73cBrw/5yPX6Bw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0-headcommitsonly.20190715182938_1563215576403_0.5404773247634616"},"_hasShrinkwrap":false},"4.0.0-headcommitsonly.20190716045205":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0-headcommitsonly.20190716045205","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2c11fca0c51888eb71cd546e08f0f5554fcaa4f9","_id":"@atomist/sdm-pack-fingerprints@4.0.0-headcommitsonly.20190716045205","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nZMn5ST7+xzkneWKVa5huRJ/9cnF0I53Pzalw55wNVcKwq+D7X9Y25E44d/kHq7XCjIUt3icfW2/lYgMkN3UnA==","shasum":"15831c517f66dfbee8fa20544ccfd6a86af6bc02","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0-headcommitsonly.20190716045205.tgz","fileCount":95,"unpackedSize":1996434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLVhUCRA9TVsSAnZWagAAgSkP/2SfMAD2+MOjTqbHyy1L\n6rTIv5ncnbRr8bRjEc3adD8ewIR40/kClq/fRj554l1mkalPt/crpBUHQQaw\njNQzg/DITCJPb5pXDm+tXzk3PX2ngVGa69CY5P+DiKfAH1tQU4WyLNCabdmB\n7u5kJJUoYj0LuvyH9ErrVIhQul44AbAi83P+Z4VQe0nWUk7hgfAs3TKL6Rim\nGYr3mXBD3LxzUGAMxeYlIiDVihFqjgGDAh4bv85LvXYX0Zqs8tmDmmZAjIbG\nVf2WdFZSRx9ht6cmm3FcXbwhW4A0ppsRZO9Y06VtF1RdzyYzSnk6DUe1sSF2\nNXt3xRnAB2CBGO3/B69sS7jjLgiZJUFaCcsaqWQLUWwEcJFFGEDY58QLcpw4\nJMkP3F5zXeDjvDuJhSjCwlPS19FJR1kQRTwZlMZs93UKv7SNqSYjoXHVJiDJ\nubElBhTbld5MxuN4k1TB+jfwvX6NeTW62SE0A5jwMCXm8Prfi0+jppK560oD\nSP+TZftkj1W721NwpdO4sjsg3Fp5qCtMCrePAocb/hDg+RbvkjD+zQfbwmkD\nhb4HKhqB+JeiBcStIe96zTo34ecRdULmEkThsGQCrQOdaFMt0e3AuwhqCmzr\npEb1Db90a72LxUGzkXsXEQregeFzIP1f8PvYdVyXgwXSNpmiCxFozFAiR9UZ\nAQSi\r\n=s4mx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiP/LWp/qTjFmaV5//swq+IwBlZcZpsiBaHn52pCM2CAIhALDwXV9dQ+vkAHS1/7sEw+pnOoHBUr5T/ZYieUX3K/XT"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0-headcommitsonly.20190716045205_1563252819412_0.40806498096898713"},"_hasShrinkwrap":false},"4.0.0-master.20190716123307":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0-master.20190716123307","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.11"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"294a27b6f9f9b66891940d6d64461e7958419ef3","_id":"@atomist/sdm-pack-fingerprints@4.0.0-master.20190716123307","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-i90fDS/cutORpaEZHNbbyahlZ9XlGkPd2BjMOQOr8pLj/ylT8qMebNGvOvmoSKpriqfMcqT+eSGGDoBM99t7ag==","shasum":"d7b1e549778cfa7844ef65e9cbc14c21083a92f5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0-master.20190716123307.tgz","fileCount":95,"unpackedSize":1995771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLcRlCRA9TVsSAnZWagAA/DMP/0i5sDbUHO+ByfIXkWp1\n015s65vbA8x/H9V2xcHrFBH3MFpCVKQuhzdvyF52B6dijNojVIm8j9CUjfXz\ngE6nerIvn93okaZNbbPPKRVZeUyhb7lK31UqPzR74HM+9YYzRKggopEnTgKp\nSonw7COEQHGTxDfa/FDdoKz7OaBMFKDn5atmShJZf1ZT6SB3/y79Y7XcPuu2\ne7X6589p+IFpbo+3i9g9IfklX7//BjPMvNNyH7u0eA+Fob8r6iylspmr0WH1\n3P6BxefHg74HNqZFMGwQEfzsUXOeaT5YX9hg4dSMnye/vZS+a4bmU4RIG3cO\nI1fEsm4qJRm13KtAZ5XMT+fQ9GCo3Pukxotqlj2nA5IPuchf0sENF62aWEfb\nzsMO1zZazS9/LLSHmAZgBuS46rno2DShopQYXcRsYv9vqeyGJtEzUYasg3XI\nv33rXl/DxtmRuQCHYSsKmx6lKesmns9j4FbfFhMd1MCIyzpiD/YgGBI2C+E5\nzidWwVcWns/tg2SUGaIj8iAADLclMrnnCjrciXVCLCxj5sCyZmgwlKwya48f\njF9vizFuo4V1aAuoXMunkHsT1bq324JK91P1dJmRMoJFey0yIvu279z47RUh\n3xYumM1c9AVq/VHBNjPiAIXKI8gtKXlBEnEdk+E+GLdwpkdqCCPV845kSYnX\niAq2\r\n=HHWy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqxn2PLaCsROtxPeAS0/saTqbecuwtGwa4jme0E58VNAiEAytVlwR+dhq9u2gFYKfVPtJIOH//arEQxOHiPjphzrjw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0-master.20190716123307_1563280484828_0.8201789589652235"},"_hasShrinkwrap":false},"4.0.0-master.20190716161109":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0-master.20190716161109","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following features:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"eb9bc991a03fca669d560071bc359e8897ec6abd","_id":"@atomist/sdm-pack-fingerprints@4.0.0-master.20190716161109","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-j6SeggvtarxmDQn6HecQ6Tnjk5lEXS5hD/IuaxS/Ziot/nnnB8FJbvwmzKyY76DharGZ4X/2g7UOXsNjPXLHSg==","shasum":"957a64f8986e8f4e70b8392ae17583ca437927e7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0-master.20190716161109.tgz","fileCount":95,"unpackedSize":1996170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLfeFCRA9TVsSAnZWagAAbJUP/0yN6rnEyWdT/oq3e3o4\nNs7i0EcyKKeopmHjhaZdR6Hw+qEIbdTehQDDxEUSTZ1R1OH1M26bqKmcF7Z3\nmBqtEHYBRq2T10aZwbRrH0WqRyYMJtODThp6dsoWL9BybiqPpj2lQm898flj\nmeo+KLD3FRyoYA+lLThJiUMtxtTB/5FLLt5vXV0EUvcXA678jkXHmdkCmex8\n/Qld/CHb9dFvytk/XgR8WRQvau5UxnstMvqgLcZvGFNPSc8hSVfvI3wU+fXd\n5D9Qp5PhiVGPqmaTpC1n/DU67T/uVy+4KPAcM4ZC/xp2ifzUdD3RIstujEBM\nFC/LELhXEux3qNtLpyyzf6YnMkVQOvcteay359rEu8HH548FX/2vCAJTGO4o\nbxh96yA6f0SVW8zhkfp80f4Wp88SQ4O/BbC5kPQ41fqYd0beEKm55muE3EBG\nXWIw9Kwfb/rvHh5QwkPrjqgXFSYZ1svJtLvuI4/g5OiyWcUEqBoBH93u2vJZ\nMMFxivI7YczKryf2P8q2FytVVW5nPsySiC73p/sdag0h0VZStRUEEsDcGUNs\nQ9RAf+liO4jtBZJGAaxGy+NrguJJ2ypnOhsXR2p0w26I3cpNNR25SBK5W0Y4\nFVYSurHhy4nyDLpWbiHHf9GKalVQcK+mLCZxzSs44B696kHH0xDklEy8Txrs\nqwT/\r\n=ui9r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFaiz57C5EaYx2lwXF7uiqQwtMfeEAsYxmrpQaFvbdIdAiBsgYwlCb7190km8UsB+7jg9PK3alUraWLfMPDqPbE6Gg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0-master.20190716161109_1563293572624_0.007577962163968444"},"_hasShrinkwrap":false},"4.0.0":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.0","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"55eb7f6bb174b5337b9a7def170318989117bc23","_id":"@atomist/sdm-pack-fingerprints@4.0.0","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vp2zr/uhEhyE45CdZLfVAWSfgT9/6EsaYppPo7SBK8hkjIWAD16yjoPCReNJ4cqilMI5NHX/gA/Ee91Wa3OscQ==","shasum":"5abee461809972e724388df372f68116192fc79f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.0.tgz","fileCount":95,"unpackedSize":1996148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLfm+CRA9TVsSAnZWagAAIioP/3Mmpt25NxOfqHXx4kFI\nvSfqZGWvd0Uf6jTTOQtrQGGiwQxHcXe0ZVC7IEIw3NCAlCUZrwa3auSlRl3g\njK92JpF+tl1ILWP+46XEPem+x1wI8MEct85afhkqyN4lixUPTLcuVfEAjYPQ\n+CsovnTtjpglmvf5WAJKEwjc5SEa1yOAB7O8oECJiFhyIT1mG+Urx67zjqwP\n8BqGgaWAIKFY9qiL/rb5e9kOIxaoF0v3xHzEvBIyxualtzuzV5byuZAeFQyB\nJR9rbag4s/p8UBy7cgpfBgR+WgFpr1oHqYFQOSAixYiQjxwwMIVjLmNsYRu6\ntQnctWXfsfXau5lCs/9aKZTssvOKUcqSFY1dRUOPKXJwNHO6mkbVgxviPfdx\nGycuvPA4KAZIuxfnf75kZ+xblMtyHVbtTn/metpp8M1VRHkqmaIU1GizY3QA\nyVNyuSWDFaZ7sLSusQuUTr/m7jtHrLAR2kRJUFrpRShrmCF7HaXuQmxagcAA\nDM6xSKuUvzATXieN3UgJwHklzE5ziH3Eg7IlDZ1cruDtfF1yEy5dKqoFlJ81\no5YI5PuH3N7svqqjlPDEwdz0forCwhRqclYog0G0uJ86P+f9vj/bLq/YJ89F\nSpVMNLjCIPoVUWK8TdHqbrPzpziPcbxrxms5tVSn1gw7EU/MipV3hUtr/o29\njITC\r\n=RPnQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3bGWwMtAIdUsJj6KQ/B4KN/epRjKJQge8PPhc8kzqKAiBdobEMQULgxzHwWVqxFUy9WeXQVhVEv3mwJHSqBH1KFA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.0_1563294142004_0.6317635554004257"},"_hasShrinkwrap":false},"4.0.1-master.20190717095528":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-master.20190717095528","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8facd8903421aad0222e85054f0d7703a28ea216","_id":"@atomist/sdm-pack-fingerprints@4.0.1-master.20190717095528","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-O9u8Gtxg8qdxzQwCDd+0zoBRF1xKATwAo8mK6Zt+BUO3DrRy4J6Hn55Zr5osZbecH+mP84aDvJyd6AS88tAlWQ==","shasum":"2268356ab1c562ad8c3963bf014af4ea8f275ca9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-master.20190717095528.tgz","fileCount":95,"unpackedSize":1995984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLvEHCRA9TVsSAnZWagAASG4P/3eE9wpJjiVbQoLLkzDh\nLnCQ3m2sN71zAgbFjnXEo7Az3hRrqcMr00p0a7zsANt755aOxexEDV5QxQVr\nGGeaoKOshl/kKrxF5lf4Z1xvTEz9RBbZSAcWBiccvNUZRFzEZBr4/Qh5GS23\nyALGta/vm5EsoftDYjvZJUZPGEC6DRmp57j7eqIp45/LIunP1nWy5IwTXYts\nrCQGdGOr7e4RUKoqiG/xxx1HRxWlMER3+gcEcozCqB+u/GtVvLh1hHhIAfIF\nWieDWwH48VC1s7vxa5dm10r3y7AwIG26JZKqHyznWca7zhoA/y8fLEOdRyGB\n8Ab9lpAIrpoVMvKkAuaDHzP/ZYYtwazd1J0KflEPej6bZNmxlcOBf6NJbcrU\n7s1fFqv1n5n43a+NXtXiOhwiNlhN/D/MsV0mUqB2Q+oWdJvf8KCAP/gdktA3\nYbDhGsqWQ0F1M6fc70Vwt2SBrOLA55ykE//p1ZfRxiI4sUbTy4EIcQuDeXnT\nRFWdn/hygDu1139T9gC3zJNYgo9It25Rfg/YwzTSaqr2lGHgboElhrSBhh6j\n9OxwDXoJsvGzlzMmxirfZb2FE1SbLCX1gSvEcBh6P7qtF678A9v1F4PlrekR\nAV6jPavIkVRZ4Du1IYyNOn2xyg+DURbnpbdgOhxZDRRj1g99uLM9zEqUEC1J\njr0v\r\n=U4HO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDa8o8eiNqIkhoDQjxU/bZa7Nkz0601Dvb9Gd6+K/xigAIgNVYJF2nSoBJv0S49kwGIOg/K2gNesfHJxsgEWDS5RpI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-master.20190717095528_1563357446599_0.4091906740137956"},"_hasShrinkwrap":false},"4.0.1-ipcrm-listfp-sdm.20190717095933":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-ipcrm-listfp-sdm.20190717095933","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5104836071a78fe4e353b0e0768cd1525fe6e5f1","_id":"@atomist/sdm-pack-fingerprints@4.0.1-ipcrm-listfp-sdm.20190717095933","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6gh5IJII1Or4PWS/Ld+t9wxLknbG0y/ocN92ZPzkyld6SQXNPYBZDJlr47h8BqZYD0LvG5kg8z4qjqnafT48AQ==","shasum":"6765e0a35bd3bda6ba70123a565b5f82f133ab6c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-ipcrm-listfp-sdm.20190717095933.tgz","fileCount":95,"unpackedSize":1999284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLvH8CRA9TVsSAnZWagAA0/EP/1GwbsYL2LrRWi3SHOAR\nnUHhRpat5GzTYYaOf9MQhO9ZCRPMBrQclo5SobQ3tIoD6QWQdhAlkAhc2szx\ng2aERL7rXL/MOmufinijhc4bg9XL6cDDgxBzKZLevME5hkRsTEzCslQmLMom\nyvju/42cTLB8lTEq6gSI/n64XT3OvD0iuRW4fv7awkTDWec9b7ZSEzKWq5c1\n83wt633rt7x7SBl2PaNMI81ry4H0z+NOg95Tz24iLKlK5BlaqqERry0idN+y\nuxlG+GIgWxpHjNYV+/NrCuGLCDmyOMrYx4aP/ib5SPgHFfClE8/NpaEFVgTt\nXq6AtLHn8aR1xbyVJdCyITxtOlMela6PN242F3Xesv3GykxjaQI+jW1iNRuE\nMMSxbd5qx0Wcj8mKNKf7A7m9OlJofms4DdwTi7lT04KK7m4Hpxi3XitCDlNO\nivOMmiO7CE7JU50T7C0RMDBOBsUcKn9+L5H2WiFQ0WmT/EyRnP+o15fGWL0C\nouyB2lHp5QECsl1z3OK9gaujvRsP//JzFElOF2e8icXDn9U1ErvXaUyBkS+u\nOVERIbDQasGP9quya+pOZoG9DYeb8ZUtK6CYm05W4gPQ3Yj6lZJZzRKYDp5A\nQ0FKc0W/9w8vMDKJyxXzGZXvwfJw/4jvFmBMioDNZCpD+RmsvtKtnEn32r7Y\nEyvj\r\n=bWxF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+9zCydkXOyyaBQaoNejHkokLxdFQ010GdPggUdK8CQQIhAKovWuClzmMblz7OlMCKaW6FVFM7nFC1RVzoJ+Uvtran"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-ipcrm-listfp-sdm.20190717095933_1563357691791_0.6440610937090239"},"_hasShrinkwrap":false},"4.0.1-master.20190717100750":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-master.20190717100750","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9a43a7b54cb6702f95c9bc40b21529dd19c67018","_id":"@atomist/sdm-pack-fingerprints@4.0.1-master.20190717100750","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QgNdLjhunaYpeCuPRY8JdG05MRdtTG9kSoXbctrpS+cFLX/E4HYRwW0XCaPCojcZYi+qi4/SKfWoKLg4dy3psw==","shasum":"09c462cb3b8157ffacb5b661462e1e1485039733","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-master.20190717100750.tgz","fileCount":95,"unpackedSize":1999274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLvPRCRA9TVsSAnZWagAAcSkP/3OZbMd7vhvTTQrhj7YZ\n9ERIrlJGTLkusQA11SHoZK4lRHRw9dq/V6IJ4FNFaMUGFxRxp/k9XiomV9ZR\nMOXvF+11351AAgF7AmAKeCrjzpX7qU4bm2ViXD+fTiNiV7waP/7VJpKiMfuA\nJT/5VPiQY2Cew13r6CiB4che2otLDunvxwB8uXHB3hrhL4AlGjYTHBiwIPi8\nCIZgyUYJFtNrZMo31yjASRwVzHmAu5HhO4s/GErC9J27JtSbJd47IBbmmfPh\nGsLywLR1nvGJ4R9nqUfiFtMMYZxzMQmzhJc/g55czU9mqNMC8LugBVcMiHBg\nzSj7GgGgS1G1grA5wYIe7/ahKJ3TRZ7yo5XD9SHQhEe9RJK8w7z3/tqKGNuC\nAoFRZHKStKeNzLpGjTToHNZEZh+PQn7diYiV91m+awibaFJOHwiGBSRoDlld\nEfHX056yLc0R98/Rf6MuBMtMzAWXoDexjaNNQSmXjEnFGWoSzYnddQ5ZrPC1\nsRVzfSyvwTfHKt03UHioqVsdEjTTWxhmIYbHt0IiGkEqg4E65bimtxX8VaKx\nwUDYk225DYWDWH3fujLR+S4+Ou8u2w3apCcDe9V99PjRvfF4jZRO838Tr9NK\no1Fn2FcvpijIXjAJb6HUlnDaAWLh0YglwMt9CBE94kx8EtqNooLXbS+3cFkk\nyaU2\r\n=FwQ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5DwsqD3IaIrLBLQkGEWFaRt9vWoP6Vo25WlrRcXB1AAiAm35DmWfVsLw5N4i25d/SYXvWGIiZsMiT2XiZFQf7zQw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-master.20190717100750_1563358160298_0.4235584909436567"},"_hasShrinkwrap":false},"4.0.1-master.20190719003158":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-master.20190719003158","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b4f3455ff551b8c6fefc7497a2dac76f05d87643","_id":"@atomist/sdm-pack-fingerprints@4.0.1-master.20190719003158","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qHdCtsQBeJxNqsUVM4UgpNISPj6zKAcHQBy/RvqYVJ4o+PQsS5iHUvjTft8R9tatKUh22RJEELAQGMgT5zAdag==","shasum":"c2fa74ce75e275a6ce7c9fe6be89c56991c88b86","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-master.20190719003158.tgz","fileCount":95,"unpackedSize":1999180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMQ/vCRA9TVsSAnZWagAAiTgQAJMLYaqmOcw0EXYCUxiX\nBdy7nSsiab1+G+47AIhaJBvkv+wD1OhQ6cEcytfn/Zjz++Ks88JVa1q5Tu9E\nbnpstZRqw4RX9ja6Kj9mfA62atchPyNHXzYNe6ba2fta+lpUZbq6y4TqzP4T\n7Hk0Dzr/4+zC0aMcfvi+OFmSV8Fm7dYyj4UwttxzeaDz9b3pZoN1zZpdt8fN\n1ejOWi0Dp8mqt5kKMAOUX9cwpEQ++PQvGjSl0N1Qm7Pa7LU23HxZavc8utUP\nWIqsyxczCJtkeExLovg0lZg9lAytPhmq0J7H4skM6GbeclELl5zl0/3Y8v09\nh1ghTq7Vhifk81DexjAVHFNMjo5oyB22cqGSJIqABRH4O3qHYZUSyq8maJaO\n2Ve3jBA0dPAwCgCl0yQyPWZ74AZEqrv+fbyapBKbkJrcoNTL5QAgauN8jnFs\ni8X/PewsXIc8ssuDnvH7mCmhhKkCyr/oy8IZ7bkr30tCBsnIG9LYgoJSnaMm\n4ooGhF3etI1vg92SlpqWtFNkgAAj1qewHo53QwCQsPthUErQ352BL8nmR18j\nihYIRtN/vwzA5WnU7y9W+UCT0/F7Tt0sTuPh1QrJdLUedQLZZh8gypaSZ3lu\nMUnG0KxGrYisj5HDJuOYObWFoybXhGsIrLSO5F+0e6vGnSHqDc8Vri88npXO\noQL6\r\n=i4P8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCO6EulrRhvEKXh0YiWreIldqOgE1M3npwKHwSdzdQHyQIgF7MhrBjKB+r0AMzBrr79nvVEzFixMJrH1RVOzHZgO5g="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-master.20190719003158_1563496430930_0.17108234040822468"},"_hasShrinkwrap":false},"4.0.1-master.20190720002945":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-master.20190720002945","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"94bc8a72697b46e6245b2b7a28c8c4c103de70ec","_id":"@atomist/sdm-pack-fingerprints@4.0.1-master.20190720002945","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-V32USzFfoaR0tA/dwhv8wQ23OYz8p7h7C9y84hH6rsZlzy56uFYYQQ2MDC8Oh1M0aAiZneG1rK6dR6zkXpNzsw==","shasum":"30fe89a66aa265bc7dc95152398e4f2a0139f9c1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-master.20190720002945.tgz","fileCount":95,"unpackedSize":1999500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMmEiCRA9TVsSAnZWagAAF6UP/jslrZcFkIdNZ91DXDSX\nNczV89afGC2QaokacaytV2S0vQ4GCNSCnosaXLg9Psjfvh82JxJrgWVK17eA\n/PYimKsIA9ZlooTvcVGF/wpNk9VCAbNKxvANZU0XpbbBPl1KoFs8zHl2TMkQ\nGoM/7xK/OmfMPfHcKHekWwnA/mPekSoX5w2sTX4fYotKfAVnGQqt7FQ8j8zM\n4cMbuz6OX/sTvXNphTQMfm1FZLmUrjJ79bL01gVi5VHyN2BV3ymSMzX01BIE\ntgyWpOVopbhfuJ0pMmsIoPZ03zrYI3iCQKHPEEnhG1CAiOH48CaIh32p7uie\ngYqK5mxJeVlZQpuBK0xrQmuaq8UA8TVHUAOgXYwl013Jtpekqr40YdI56npk\nrEzKllZIcGGK7i1+z1a0yuaaDhvcpJXvSEh54cksq/7un9BTMIRVhTRjYelX\nr0YAs159luzpOO5aP7o3/C6eNTInkf6J8bnHnin87EFOW9MrzEwmqIVA+m/f\nDu8t+4DgYLV6ZIl0jFS57XHzuT/5H1dWMgYfXEimq2GxOT5FlyXdTTBsGQZB\ncmiX7YSxpwbjqAoSm5Obs2z15Vs8CPBneb5r7fabAab5c7M2KwR5MfYt7mm0\nBejcxHcZ+A4i47sn2OjZ3QCHo+TG6cuUkWhjf1GzEOVFtNs/K987u4B/RIRk\nVez2\r\n=8O0b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCnk183GirLdfj6MCnWNQIJlZLnz/igI0a2izJ5ssGmAIgFqEyX/ZRDhoOqac83BqkpkLlx42QABarN1dvi1fBxYw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-master.20190720002945_1563582753909_0.8520863625260706"},"_hasShrinkwrap":false},"4.0.1-stats.20190722081758":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-stats.20190722081758","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"38fc9ceb2feec0e8fa1e623c644e25ae217ccbb3","_id":"@atomist/sdm-pack-fingerprints@4.0.1-stats.20190722081758","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ag/eJhYSqKIIIHMbpYVeMYgjd/tW1cPEZCmb7cueiI2TG7BsCmYBOmyo2GAliQKN6iDAr9xpqsBSl8HwEVTNsg==","shasum":"dd7573943c65fcbf380d0972ba93e194a1fdc908","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-stats.20190722081758.tgz","fileCount":95,"unpackedSize":2000840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNXG/CRA9TVsSAnZWagAAvD0P/09B01dH3W3jsk6SCHoA\nOGhcirn5ZbgzV+E3ULB/kde2/IkT0iR62XwDGtEJwW6AyfkhZPRaun5YPnK3\nhZKXhbdKvMwoiWVJ1kj3zR/Ib692gJ/me3uV/rktpJ6yBaYINQisMa5Br8Aq\nYF8M6/718piX3oqcGo9WmDnU8+vaflELJFxPbWIjWLW35FpAC/vQEj5tUyg7\np0Jg4Nd0b4BX3u683EQjQU/oSoTGroFO/97CyuNixWp46TUKZbf2PCsftrJV\nXbf09XpMYKPbjoZ4L1G6NVkK5Cki0oUOFrv2NkER5r4ep/2fHSJVrZdBo0m+\nkwTOUq/yPP8P8e5dHh1YlIqUFno935IlWmU7u4I+ojzQ6xJHakGGf8e9x+H1\nwEQ1pse2iGYHIQBnuzoE5TzCJvzloel11DGwhUZigKlvMW6KZ5WHWV2Y53AB\nW91395MjJYk1AnxkjEJXGmdEL++85D+Y6Rv436H3e4h4Ab2Sb91kj+b9h8Pt\ny4gWVJsN7G/XJq5W7cEdM9knw13fz5K766h6EJFh4HdrLDcdob59WQZzOz/l\n9T93UrsHdNxT8GESxrjshZoocW7QmkLJqr/WQPICgPcPT2EXjPYQ71pO2CTY\nPNdzoXmmSTdBDAeleWjKX/d0kUmRIKUYAnw53be6XIPnxUk8Z57pXb4pjXPu\naNqV\r\n=q1tD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXb9etYn2XXldGtCip0yJk36lAwAH9Vy9Yd7zDQv5fqwIhAP2S13Y3pQWCqSZpJisnl35Pr35J7vWP4Jago6pGsuRE"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-stats.20190722081758_1563783614551_0.3030086970214865"},"_hasShrinkwrap":false},"4.0.1-master.20190723063638":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1-master.20190723063638","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"855ff31aa4f7615edd2567d2ede514dfe165d8f6","_id":"@atomist/sdm-pack-fingerprints@4.0.1-master.20190723063638","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Wy3arxQCwOyw/LvRx3tKb1ZuXCb4Wz9zWuHpeHJg1Ekes47oArT29lnbtmrs/oK3W5ct/MSUB+6jcvVXgSdbsw==","shasum":"4a2d941f9db3267c9b1ccb57cb8c37151cd733cf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1-master.20190723063638.tgz","fileCount":95,"unpackedSize":1999418,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNqt/CRA9TVsSAnZWagAAs2AP/RrJxrBbU4mQFvoBAIqT\nRfegvKR5/vpzrkp5tv8+0DGFTwd5ABq8StUdBc/RyET5F01nc5D7zM/Bi0Co\n8aC0es1pk9PDuinoXpi43ZkAl9sM84PXRvgDIwrH5kZRLMQ+Vid5H35yaVWP\nCvYwZlzxnVBEvZ0FWy8FlISHE/J7izA7c70m49kqT1329MZk1WBXUkdGbRKb\n4Bsjalp2dAcpAGLKEdWmrfuLGk/8cy7dgZ9HGSbxNGGM2CB0i/7ndGkGqR84\nx5UriDDUS9MUxivkOGYB19guhFVu37FPsHQa3m29mLXN8Hki7C3uUsQhnI4A\nF/JQv5GPYVlZfzz7whUl8HKxtja4rWV+Ktlqhb3FySMRb8BK7ay0hM8dA3ra\nsXwyZ+iiUL79r3vkPO+x73Jj8eraqTkITg4tszf2s67YsJRI7hxhqb5JMHTj\nehv+a3pvc8KjGm7HHwNngcxwZDm2HpFTacJiMtSgRwZnuU58oZ/GZbnEznjo\niPuH2eIounc6dKwRXbVwBHp+E21lq8nO4sP2rAU7gJ7o8fMjP6CkkH/WCcF/\ndwmGmskQutQp9C9DxcBGJ9pjviewHzAeiiXsldPi46gwEy7aA2xGxw32eNyj\n1/9oGoNl75hrpb+XBmCs0V3u7TDCcJSzME2piAtS1q7ZbvtVY3jbHk+0NWeq\nDFEb\r\n=EYc8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDfBB4OLMQm/HkJt9tRjK1apG8qdA2f294ziIXPaFrKVAiEAw4S7HQlwNuNB8kSnT/DnnE6FTntbElOvL5mMdour/N8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1-master.20190723063638_1563863934391_0.9964832837104691"},"_hasShrinkwrap":false},"4.0.1":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.1","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"677fb1527a1601c878ad68d21add0d17a44b8b55","_id":"@atomist/sdm-pack-fingerprints@4.0.1","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QUNyW0lV6d1Gb0DzAU4qdN13h1qQpIYMegc217vVKZgPIqdO0XfCPNy6/e1yvZU7kTSmFZ8NYBT1DYJnFoQ88g==","shasum":"852c13612588a95e9e4aebd2d9cdc79c070d21fa","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.1.tgz","fileCount":95,"unpackedSize":1999396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNqu7CRA9TVsSAnZWagAAdG4P/iR2YpCzLzhQg2/+UzcU\nnYcSx2cxqGrc2VioLB78s1ox76U9xvmMef5pICVsBOiRCJWplSxqDcgb+EqD\nb9XkbqjLndWoFplT7wGmDhSBrSng19+7VHDk66ZegFKAhyXIOZEcOVtFAEaV\n8hHKuluybwBAnTmx5MJrHtS/YIlkt2cTEIFShHj3Z0uVARcLW/jW+sJTaT4w\np79WY7IO13JLZWWRKpkrSMSWVuI8rMUPdjxIHl13isD7AbQSx0i84X4SBgUk\ng4e6Z8rTg/wroCCnIEFdf7ENoiv1rx8LF3Up0+F+5IpRkiTHtfXirkpnG+4F\nyhH0mFh6UpHRg9tbM6XMYWDW9q1oU61iTj0wAWoR38TUW3bJy5Ao1C315SIr\niDOj1fNxl8eHOUHveB8VctDb6c+obKJ3Vzw3FYqkoZl/fpTtx0zTboYo406F\nCGb353AHmWldaMcmKEnnh48cBzHr9OQHqA/zndaAONSwhekM7dwbfsaKk+ez\nsCGfEVLmrITv7HGmMmDQDKsle5RDxgBUUTT8uGD+igaeOd96e5egDpPAohCB\nRG7xjSP8FsN0K1b214zNQxfx9opovZaLNvmvYmuCodL6MLcUzqX45EraBvk7\nnWK95fP/BhVhigRulJ174oNRF0uov/2LTqTF8Tl0fqi2SnYOBUybwPm4igra\nSM1W\r\n=Nhxj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC9Pzuns/5IkLpVhKFw5YJ94d/9Wvj3y8EblQHI8s8ZuAiAaW5wJzoIZ3UjdiLDeVa+yqeMyL4epQglabD6EbN4vhw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.1_1563863995004_0.5014019189015753"},"_hasShrinkwrap":false},"4.0.2-master.20190723175354":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.2-master.20190723175354","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e024ad1bcb24dab1ff74996d0f4a2ce7829071e5","_id":"@atomist/sdm-pack-fingerprints@4.0.2-master.20190723175354","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rJaN1H76dzGgi8QBawyNE0nhBHgVkqvjcZ+cn7M/viLO+aSVrL4CRj2TKMeBfbK3HuoZ70HFomDe4RpX87RJlA==","shasum":"24c52e33cce50501163d16f53a315e67d8d11836","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.2-master.20190723175354.tgz","fileCount":95,"unpackedSize":1999772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdN0pVCRA9TVsSAnZWagAAf1kQAILBTCOhmT/qP6XkhDwT\nKgG/BIR1oP89ixsjhosFpmneRHieB3r4Lw8v86EojClBAOwK6Tc+dTU//0+6\nM0U5LBN0QfHjg8gG7lxcIbdjEZW/EsqPTJwRh6ZkTax2CTgksLTFQ1m42531\nSOg+yPEoabt0h90ibml0phwFBjwUq9E62VQQSwk59mZP4RN162EMiNgpktcd\n4p7oRVMB6hXbsuvEvhLg9X5crETF+30bLcjN4RgC3JQiwAMmRAgg/f3+81kV\nVXFOTQmwS5GYnwbxmy1uOhQfztAvfxdrP5WBl5pwdrbFfXdxJzD81i9WutNQ\nhT4+XLwLi6RbHUYJrVrXz+d/vb0574fUhyArM8Z+8lyj3qL3u4ac1ebl5ZF8\nNzqrLeLVwFqHFdyILGi2w/b0DRwnbw7QuAeke8T/Nk7Z8zsltETZBDPMFC3E\nSVN135cz6175EY89OOdAe1W4a8TrX64/p3xwivDMhP0ZQHbH+/uR697H+Dc3\niC3WfAH+I67nNlCkfskb+1+O/doOxcHy+riMJsqdPFMi9QEPmKOPWRnlf6ja\n2YSLC+UdC2Yw4VwBonAfutgNFgV0rbbDdKjkx0qjFqxVxQAhnIQOsaxP2fs9\nf7jBTN5E2vwq+lFUj7j5mpw+TdlmFPgauKPDFOCyFCix0UzYOKN6eddtaw6W\nFYSG\r\n=tSdO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwOIqFHTQDlmukFKGWSHE6iFgIQC5wbme8o8Be2/Ru9AiEAk0W5dloQYLXUut5jxVmT7BatM3mtSxFX+OqdDjVngg4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.2-master.20190723175354_1563904596140_0.1715330899815053"},"_hasShrinkwrap":false},"4.0.2":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.2","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"6d7a595403c3fa557cf0653eee62cf86cb8f7078","_id":"@atomist/sdm-pack-fingerprints@4.0.2","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-u9itum58zkT+Ha8PlnPoAf+bAR2aNDj9rYKs8eDw3RRAzUf/Dvt8gAU656Upsd9przs+a6c/eMT1Sx96lC/Xcg==","shasum":"7b4f162d43b511646d58fb2c85cd163e068e7529","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.2.tgz","fileCount":95,"unpackedSize":1999750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdN0utCRA9TVsSAnZWagAAnfwP/2ZldabAKlZmlBFz3Mqb\n2G9t2hepQ2HM7CyZ1g/mIcUIvmqmkH8lAImGJ02TrT7Q2einrDuAwPEER5pp\nIepaUSAK5ilMi4xtQMitHyBQaHJhd3/VlcyJT8wFOuD5C4hWB3eCOGnsXFc/\n5PlXmczFqfB/mU9x0ojec0SA/5d6nEX+L5sFTt0tSaX/3Ch1qRZn9ATM9luB\nCIlW/t9WDovLEN9l9NUytX32tWs2UmUrIkM+Ef3lUU72BW3GV/PnFHMucKoe\nPpmsI6p8e+nf/djeLGcxJ2q3zi1rA5Cj2MHGks7nWtP0sgoIKdnDgvaNjUEy\nRR531IpZAkhd2d6k2ncR/aio7dQCQzGejjv9LcB8XgExRHzCanhmyqxwT5E6\nhecn4PRJISP2mGDXMfprwlUiS1W7+SPzONC6b5CgTiHhLyA8MPP7EXmLbnm+\nP9ia5oI6aNIZd/X9wTQYLS3pzo6dV+K2jsAJKNCHHqDGKqViJVeP4m0eKMsu\nHxScVGiwWomD0ZzLMbPBOnWOKf3FHlvtK3+zBK8ylAqbyfJICMNP2cMSKoNQ\nqGvQXHYZFiRAr/nzoXG/OhiHbKACju3JoiwbIP/IuVFSJ3TCHstkhLGC4LSc\n0FRtH+zulVvimFy0odiNjVJyzCWgmlb8b1gNl7ViStXG+/skAfehPNAsLOt8\nw+ng\r\n=0Blw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPCgyuQR7xf+LHPj+LboptG62L6u6XAw0oiw+mPAfoOAIgNciOb9eHTOj3Q4dKLuPEXwM+ZXUhFQqntQntjoyCjdc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.2_1563904940673_0.8585848644042366"},"_hasShrinkwrap":false},"4.0.3-master.20190725150228":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190725150228","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"14ea0a9a3c4d92c3055e4a6df660acef10a5182c","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190725150228","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ctYeLrDoXY8DPusAqQ32CNSE5i+3X7lHM/sQVog93wm6d/Zrh2qR60jCPxQDoGjrMMwv8D03N5q6nYGcLQgtuQ==","shasum":"e317282d7d923f31784f4db2351c2d96f2b0dc95","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190725150228.tgz","fileCount":95,"unpackedSize":1999842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOcUICRA9TVsSAnZWagAADFQQAJMd8FQP8B1v7Ssn61nB\nTCUSWbFfTqFFU1OGOXo4AZoIRPmtmJhJQQMjPUTVvDaPu6/6mKbrpj7d9k1F\nyh5sqtX/SikJoZAH23NTZE7Oaj1K/cwuOP6/zq6l1sPqXHEy5rMMNS7/CzcA\nIwHJFfXcyep3NTqImd2817nE/NBWEYFQyRFxs0bWVkdKT7y1I/jqqTPQ8HqU\n6Sp/tNmd66DugAjIMNd9BUWIfHM2hM/g8eIpCMyigTNt5RDpZqQhqGTHJFkU\nYL0shkB6Cm38msxWRbuYUzNuP0/P+vrpVN+te3+Lt9iR5YbK6dPhcEIIk3S+\nAuT+3Jvupo/TZaDdVOiljEVN/SIN4kOGwEvbT+wT2wO3OYaQ8HtJUufuZ7gX\nLukQ0KZm1mrdbTSyL6fEFKVVRoRrOMdVDsRAlkAyBJTe5e1AQBvw2SYnSKhu\nVf8vvEqztphPPFhXcCD+tH/+g2KDo+JGGbtGxLIdIWCoWnfr653fcV9mrKUZ\nXqIdGg9Bo/HOYZtun+u5V7JqSglkFoRz6wSKITk6A/Fdv8t+tONm2ATKh6nl\n65Idtqiim6vtwZviSgv5yfA0QuJgjydOQNJzhAG4O6gZ+dFQk/0KKLPJWdMh\nsKB6IKQ/oUhx1zqDXmNo/JvlRV8FyKRTtyUfI15D7Fj8Z8qWerEFWvgtaM2x\nl5ae\r\n=uMix\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1G9rjPgLmUgbNDAiByHEHK3GW1GL7l6zgVQGTSUDibAIgeeZh6u+4CDVlvBrJKY+bDujcraEu+FPkxCD/2wb7vM0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190725150228_1564067079415_0.8241612552725317"},"_hasShrinkwrap":false},"4.0.3-master.20190725205300":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190725205300","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7c9e4484c6ea8bfbc61c013b8ebee569ebe6c309","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190725205300","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jjCPZxU/CSSZYYQnJex/2eLZ6kWxWc+fJRBt17bnNXSD6V5xLg2BwV5plKr3UKGulzn8uAhCJfnr7ZG1upbAhw==","shasum":"07261847b426f00b8aec92de6c373db11b51982f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190725205300.tgz","fileCount":95,"unpackedSize":2001183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOhcqCRA9TVsSAnZWagAAr1QP/2hMEduhwSyudPewM8Hc\nPJWm+6h9sm+k4tj0tUAdJ9A9Svh86e/2xI5QNANaQgpDgsxPokElEZsb3/So\njUEe0+sSiH1UvFiLfH7zreezX5spVoOSdvj632QKhmRvI6PMs1dvNELTAZK6\n3+33Qhn9VnJiLIkEuGgjZz8uE07KcoXZrGH4QlGn216lKvxK2nwtokcT/XCb\nAe51OZRfcMRJFyAM72VICjvh+UsEJwWQhzgoqZGZ7/f7xZtgYg3oJOkAG01E\nOubHG05sQ7gFf1TL4JBxRUDilxTHabuZnPPkM3XB6dldZVDN9o0WYLtbDl4Z\nQ6Q88H13KTgnnNt2OTdYsMRojJYzR79od3LwdnhVKTQMxMfTL/sxZ1Qyhrx1\n08Bw9xQTYQnFXhupuhHHP5l/hXzn1fQmjxOF9j9GmTh8CuE5IacybgVhMX3H\noL1MjvShx0xN5xFXWajitLXSXx2zcVxqfouXq/sDNDrhgqnDzTTap2r8eIRL\nepmXkeZFGAFG5CEX2hN4xZQdxttpsLDU8w8jOdc+GBYVSiDOOMteg2li6WHJ\nETcpLZpzt3v6FH2KpMUomQRzz9xBBXlGAW3y4NPil3jO9MvTs2y10n+EdXtQ\nB3KG/5XudRcyju+RmCqZtTVgQZBx2Ly5DxLgbZPmoXrrRhSAiGHLWOTTCcYG\nyVui\r\n=hKoD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiDZKe0nD9q+o6a0vkKYvH7tvd7G5ode6JKnabo8p8wAIgFoeyVByiuxO6Vz0OMgH6rk+arF9aGGIFwbUbej7Wllc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190725205300_1564088105537_0.35413911530144193"},"_hasShrinkwrap":false},"4.0.3-master.20190726053018":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190726053018","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5b947945a311496c2b65593be81867b5b223922c","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190726053018","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-iCTfBcll0YOjNF/DQ1Iw8DVdUlgRklDTlH/QN5BU56KO5I18Zy5zC6IOqL6qr7rNU96UJ6gjgARWagZgJ/+6ZA==","shasum":"ac98229e067fc7c270d3d3ab8990e346f958a3c3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190726053018.tgz","fileCount":95,"unpackedSize":2001630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOpBuCRA9TVsSAnZWagAASu0P/3tcjMT4LGGWljMAew1K\nziBWcIQfo69gN9+rEI+PNGZOX2R2GuI9zJ8cVuKPzm5X1m3RQ0MEenVWd1rK\nlT/JtllIZBuUyTX8Vqi4N+Am+nsxrUmDVXugRG2knlMklLo7B69kJcDWzweI\ngSzRXsUdlVFVp83n/eNwhKpL1mLe7o3JidrbhA10EJOPXMWtNuM0fD0K1du4\npptj9fks+j5rrXiYp5esYbiF8QsgLhhe47wZmDAIN4JaqjCZeHX8UDxuF6kK\ndqpko3rusdUPn9toP/LdHd9rRuTOfTNbKcHhkCcLfOxT+ApKimbGcIBVecVT\nvdyCA2uU9zTCCc036gKOOOxWZ6zgzIEa595hyDE+az5hJEwYcaPpxNf70vz2\nfRI7Smyvv3ZVIihfG3sasJLPZFAyPjkoB1egtj8AxU6rGfmb8Sx8MphaSJb5\n685IL8XF7X1mmAPBnAEcDJ31BUBvIAD0sqPy4pxYg/4RPPscfhX4VJKRe/X0\nFP5+WXLfAUyZSlFFfFUNORaCL1b9pU4sM5OGJkhwi+eK+ObwwUKZValzXkpz\njseOR+08cU/BI10KK+CzQcZtwJhuiVo27sGAm6CfOFzwXkHs6BFBM/+xBS8h\n5jgHLTVxFJBamDeeyr2KUSQEW2DZ6sMfSj1dhk47z/tOC0St5gsPa6f6Kcfp\n+Egs\r\n=/QpX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHdGQR+m5OaEns6JhrcgCdF81HJQOE8PUMu+C+LMoHeoAiARmZuTpN08AyS7NleTl42Lu5EKL4uwAbZUQKjAfzsW5Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190726053018_1564119149988_0.7822454747970116"},"_hasShrinkwrap":false},"4.0.3-master.20190726075222":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190726075222","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"98ee34e357ad07d1373a7851b230e6f5ca7dbc27","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190726075222","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-w9pbQmDzErHkQPMd+qc6rnEuvfk5WD+QkiO90wA+3cmPQHFlENSQu1K/VnLzKAHApbJCFFpT4ShLWFNCzto2AQ==","shasum":"407e24266d0c2e822c4a0010a32a8279b5bc9715","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190726075222.tgz","fileCount":95,"unpackedSize":2002309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOrHdCRA9TVsSAnZWagAAnFUP/0sOWnWrNJ5fUx6OazZB\n0k+c9Vu0KRqAQMiEOE1/lBkMjJys/gA0SE+OaACq1TvETrVyWO+1oVqOyYly\nyW8BVgJ0sZ/Ugaz+n5q/jZAa1f91Y0mUO4Z5sgGqJXae0CAs6wP14dbqD+qK\nfFhTVoeuZiR1w9LwmmF2PodnvqP8JujLnckgHADg9NnaSEuehZHeaBZeATFT\nXQxdCTPCawjkKPKxkS6h+oUFA3q+zoa85fA8wM1qkJSMlPa0T2VsMJv1sRMk\n7XhMd3uK+FHDetgXVqLh1J1ZssDBSgzGs5IvxRM6Tlc9fmNzyT2SXPoND0lp\nM1bNhCQVatI7Rr7s1VaIe8I9NA1Km0ISZQ5iFECXRbUCpfPScObcw3EBaDo0\nFp2AS/5oIS20JC9RMzrPDAhveiZGtSJpw2ovtPane0nLrHIaOeaqqxtLYn2k\nMWSR9ptkgtY7UCAKprp+wUgtD2D6Wcouz4AlamtSTKnGrwVfTbH6NttRujzr\nmOlRUlfgkjdjKnCl4T58aMaED8HVnmubz8ea5Vjf3SSIRtKE0NPe10+8X14C\nhIUmpKwSzFngpTqw52YOX3+LtJEjFm8A7jvlv5K+Mgdu7Q34/8CUECezObfD\nZat0H8BKS5OogMXtarfoUO8abziAT5bSzhi10VxJC+QVVSHmNdpAuDiVrciT\ngNRl\r\n=2whD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAaYQ+Ky11j0R+Cs0s/iC8dPf1wMjp4Td7tm3ImeNqpJAiB8p54lFrZuQfjoVNQOeoOupPFHBAyGwfBBhYIdAA6oiw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190726075222_1564127708480_0.6262139021915634"},"_hasShrinkwrap":false},"4.0.3-type-fp.20190727222628":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-type-fp.20190727222628","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a59f9757e15ece09b153540c6595981e8d5f9b96","_id":"@atomist/sdm-pack-fingerprints@4.0.3-type-fp.20190727222628","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4aQTP7xL5BMzR3PGmBxVMTs4ZRIhIeKd4HXJDEgxCec1ojQD4SLdQ2e5NcXrjO9Z00Jqp+DEgeBy3pqrJf6r0w==","shasum":"560799810753ef17adf9dd3b9f8df0abbfd8bc99","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-type-fp.20190727222628.tgz","fileCount":95,"unpackedSize":2002521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdPNAZCRA9TVsSAnZWagAADDUQAKHg/p90ze0hdkGP+FZ9\nlVj98Gs8fTZA2SkAnIsN69M4C0bx1nN5/tPU2wtnbOblKgd16ZZnDzDiYaRK\new1CRK2i//pRd64FcR4Ey2+F0YL3xOO34xPjp343koiPAh2THV/KjxHExB2B\nTMvF9Z/NAuMN8bDm1T0vPDW+vlDNDHnfGFS90G/QlS4uE5mekcN6RPVo1mAp\nU9CNIy+IbQwDitTqMuPSzU3J18L9NuqnDu5L/3FglI+Bg9mmeilU/XGqlaLc\n9DRZxukWdoUaZCJ6Tu8PRuRq94K0Z943qi5i0CqY61bVI8Ozb0256Kl+6JFO\ndzIbqQ2PbrM1uIRAzgU2bvgGSbcCC1fRXTekBfcRUWTTL686vRlRUU1t9Aud\n40CiNPBDQuFcBcZWbpZTR+vQTn0QKGbOYt0Y1ShE3bUBB/GuQfZpdy+rR+Q1\nE2C2c1AOGIQTSp1dA2psjhIBdo13/p2F3/y57kMlTHOhqn27E6PsfK2s0KB/\nPwb689rIRmW7ajan6dXGpm6TXzEr13TfISnr9F8n9UfTand3YMkESd3yGyUt\nLaT1LlP4werSaqZVZintu6OVBIpnPA3sjFxdVRWwOVKRYoX2rNKGann7l5fY\noc9AImhqwtnERA7jlWL3uUDAQuznVadnxeBG5BSu2RWMXsVCT6mwke//qOel\nA0Wx\r\n=0euW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPK8tsmDiYbllazqxU7JX6IDGE6hOrvUrYt7H5Lf+9/AIhAPqTKfNnd7ZVMxg17bBeED9z+I4aW/xs1vYajZYCKDmz"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-type-fp.20190727222628_1564266521368_0.00553912387121458"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190729095146":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190729095146","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f0ee42c2904e8cb23371be13d0c17f9460665e9e","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190729095146","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GQ69iVmwKkWgr5JrnVZOc6MQCvzztV4F1IE4qhlcvhrwDGewhWRb21GudhfoFdAmKBHNLwdDrIr5goztJz6KbA==","shasum":"b4f14658a3fc184df5aea5b7bebf8e3d67ba3386","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190729095146.tgz","fileCount":95,"unpackedSize":2002888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdPsI/CRA9TVsSAnZWagAAMD8P/2SRpZowrrekszylwgqz\nAX+0YTGhE1n8CBdSJdToPdMZyGJiduS5s+Bmc4LN690zJb4vTQ3rCqdbPczM\nAdE0ZrfozwXlqzsiZoD3QLh6Ej7D+ppROS/RT8mjgu8gzPHkxEn42k6mjS9/\n4gbq/92AKaS/d1GA8OOkMy9usTQwp8pvJ+zQiW18W5jG42KsckxEUtlj3NSE\n3ndpABRF5gqDoIJMfFfK1MYZUo1PGFZdK/I/ovW0XikJlPEkMRdea0yjeXqz\n/jMnGHLoSY3/4bj2gc3RiaklKoFVAGwM7UrvbMkn+3zg0ZlzG06sQOMLyPS7\n8MrjXdss/pumvWnjlQ4zFKbEaUnDUPeyHvVP468RSwGrw5ktKdAzNl32vqT4\nXo5C7MHk1mv+8Q7E9I38zETQJJHbKApalOHoLb44ByNq0OOQK2ZyzqgSG+H3\nloSsphpKPqcP94NwImdhCj/dw17NoceNF4c1sPcALumndAwDugDjQfgwoZr+\n8ro0otqnfViV/EgZZnY4g+UgXQSbl5ajO7IvUKo5Dly0ayYZrm4souuitSiK\nXTR80kfZEwacoDE4Hggovhzdaf7uMM4popMHukVI2smdji9QdNS+xT+/OQ9t\nSgXWpnZQQr1Par9IaRn/IFetWDEQw1HbqCBy15DO0dL6VUqwQ9zxef7yWDMx\nkO49\r\n=PnMD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYOh9WQrsKyqMKDDHM6QhqlrQj03bjQHv3ndsrHWSAcAiAnFw2Hd+aWDVWIlir/fQQG5nTnS/aAq1twuI3LEv3RVQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190729095146_1564394047028_0.18102974064568644"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190729212407":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190729212407","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7712500f5b907e8a33c7264c97ba8bf54d88aa4b","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190729212407","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Fc6KaZjpLHPWUsVERYCBW1tcQvvFskAjAVY3SGS43v4f6P12V1+0tYQ62bh3iPBixvEzSbqUJviSJ713GIWCNQ==","shasum":"e94f9f20de7e0dc8d20d23e1778c9ec2ed6b12bf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190729212407.tgz","fileCount":95,"unpackedSize":2001539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP2SFCRA9TVsSAnZWagAAWWgP/jlfwYvVlc7TQGj1eeW/\nrNk6MvWmDEMX/UkF/veJNpw+9h4wWtrUgcJtsphWF77H/MO97m5HQ+nQuuOq\nY0T0eK+lJyh1KUczNQy8V50a5u5fE6zsdfqEvrnsSeH6SwlfsimdlSUUVLEx\njJRhXfybxZh6MqUfqV04rctORvq+DLdgHaRLQsr30M9Zjg90mZnXyyq7ppOv\nQCxsxkbM0Cfi59iL8gDluEPWJg9RaG35w+762I+jBhVqdSrRNgDgBOAtBhk2\nN1qRg8jJ7nW9IW2ixPogOXghD1b6jc0HtV7mP15XmGN7MP3aMztLs9qIj5XH\ntJTLyggRWZHPcg00dwLLQhZYfjY0tVFW5mw+9cdpde5+p8xv1GY9WcBUQPnr\nvGr/rNgwdqvsQxUg0tA9exzapi+/Wg73UyCsUuhzxyvK9VM3gmv7j//4rKtA\nJ3IyerPubivTJG/1vqgy2XGBLspZIB4ENCi0wTIOQGSlxMy1VdLqsAM+Fias\nsaNv1TDwtncBfspk61pETJuKZ5K+vP1YOWgcKmPskoEu/eKC3hhIyZppI86g\ni+XSd38qM0SSrgkKXgNn7X3sKJOHP19fheshr5tFwSJp908zuiv7RTza9a0M\nQvFx7cMDZF1fUSI5WprJhE6WwWcuVIktNO3idwp3rq51yZ0Zd04htJGlTkQT\nslvl\r\n=WpCE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICD3ipIPqAgaSNmMxYi3QeP9Phv80B8fenq5gS/Pg59YAiA+zd3ZSCRBAoTvt3+GnL4e7R6Yci+DKMrbi1rSGWL3ag=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190729212407_1564435588207_0.42839819657338274"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190729214307":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190729214307","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"18b9dca7dd642fc6d16474d66634f5e96a4f6759","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190729214307","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jDFCKPYCbrurNu3RhE7F8lySaS1BUIskQ20hW9UORccHcHFesLVBlq0xQHmuK8ZsHBa+w0mjYdXXLXN44nQrpA==","shasum":"79bc4d7ef4c085fdfef901088e27f4c4d88b86a2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190729214307.tgz","fileCount":95,"unpackedSize":2001951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP2jlCRA9TVsSAnZWagAAo40P/1qHXYqjclte4ifcdCsh\nIzXFwd4WmxO6veANu1m53aFJ3ZP6WlokViZDHE+wPvTEv7yGVa/TaUYvAtK4\nUjavaom928TANgv83GCOKr7wdeRGHb+NjCD/u6ghWfbqfSWbgamfkxPuO/EU\n5F+O9MerWdxCNIUqZc7qT/7VvEKGQYLE6Sw67VLta3liX2Nhv79G1Cxt5UaD\nkBWPGKesfQdr8x83GlulsVfqCuwjfQWx3BWKJg2MZmQ6DZVXqv4ZdT8p0Ve0\nyNmzk/wBtf4bz8+GTQtHX9QskoypygqVZuTi6m3zoul3N0mcrVyIVROOwKWv\nfnt0yPQUe9DgUowml7pmCkxlrNe8fM8/sN/KW7VlqJ6i/X71udHT6/oYa/vf\ntpzi5zais2Mihnae7xqVEYH/pgbsbxS1/U99Pp0Hw6E+KH3edMrHcxPs9hOi\nG44sPP4/XgVr6uO9MLaApEqcVbN7OowIrihIH+3zsmJahvhzvVCUUJN3Rct8\nvc1tE9ylkIfls8mvrV9xbTZh48zH13FuhmW7Z8s/PS5tHioFmLibjs4Emes4\n+Vq0YIVtS8Am++DJ4vtVdVSqHoKIDdRo3U1ZbXvkHuS+RVZR5inIj2EVMtbV\nzFe9pzm3btZraITPR7FjZ9AfD1CR6O60h9JhMBSt1OFrbb7O+bZZNmnS/vgu\nnQug\r\n=PH0c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjH4kN0GUq+z4vVcqYr1yRCU5mCxay4u0TkfMP7uTuhwIgPnOoTz3YEPTspr8ZOxCYlV7YLpL0/yhw7OsUisb7Z0s="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190729214307_1564436708612_0.11864686037626493"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190729215816":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190729215816","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7011bb9d98929993e893ff6a16d54ad46967ac7c","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190729215816","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-dqkKpNk64RYu5DhhYRnbDNBzW3pVTOkDcMP012/PRuQNaWdifkXj4anYksK34uKxcqMhPFNrVtHUR8Hjfbrk9g==","shasum":"804cca1937d6c00de6a5cb47bd78a64ad0818eb1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190729215816.tgz","fileCount":95,"unpackedSize":2002091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP2yDCRA9TVsSAnZWagAAgY0P/jFd9HURakqxEH/kIEys\nS4M3S31ByTsNcKC92cPsgcGsyTzBb2gx2t8Z9hqpQPui3tCwmBTe9XCaDbwY\ng0WxQ5aKWi0cMUfTuU8g7n7XtRHWYTMA8+qmKnqxfvUOaw9cYEB/+bUPQI+x\nrAGKCeO3XHQNeGH6OOPSSRzchTcxsSOKN5XDtQ/+UfPw8F57FseiPDQ8uTPp\nLH1ZPmRtcNciW06SrmIIXsu2P8arSCAkYqODEAY7H6PlXcW3zyRiS1DSkze8\nldIcgf6m/o/5oIyZcyc76SFu5USEFvFDPaXZryM1RnFRPEEpgtpRY+ojFs3N\nTKsTro08ZrL8zFr1dYoUVh7QLCVOp+QozD42WFCYCROj4PWjymfnKhXSJGf2\nHXwuKgaJFsPYFAFFT3O0kPqwHHcxBhA5PipcMxm7zsKB+uEpORJ3ZuAt6xqI\nll0mJmbhIcmjbRvdLYZY0XO0LvQicnilGIWOxcwyrBWINoCZLKO5V8zA3jWc\n4PTbja5mMnU3QcE7ry+ALEvKMplPM5vCI16uv+V2x1IRN7+BAhMfbIwuWjqb\nlTPo0JxgZH0syCWtITwgRoAC7v+7okMaWQoF0xVXv1iM0xtI3ox0li+n59qo\nlZSOqi6Ky3i2pTG68n9CwE2xn5t1KBV0+NGEFQ1SR0hg78V07IuUA+fDSmOD\nK3Zq\r\n=s5nA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlYCSr7Br5dO3fYc5EffsMOSEodsypRPO1rdkWbbnp9AIgQP5dt3cG/29tweM/D6b6/3ewEnQKTTsFE+tLqexwhyM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190729215816_1564437634669_0.4936190460613319"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190729221041":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190729221041","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fdbf0de67b0940d0014374bf481932db90d29379","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190729221041","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-p5t8UB4orrXq7U4Y/bQgAT9dblQiBhaKswQ5Y2WwNoOgUNJaXri2KdKKD+/M5kwRCSNvM3JghlhdhOInagEQ1w==","shasum":"e4a636c1f022a55835d0ce6a122f469b7e5d1ef3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190729221041.tgz","fileCount":95,"unpackedSize":2002092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP29VCRA9TVsSAnZWagAAT3gP/RPCDFMTkuSRVuo0fms/\n48uEWzmWpgbKmNUS7OTXVoHEzOfaR4w0jeyvu5tEFBtZkV/8heWUIw0Qqzdh\nRtrW1BeGonINPNzEhYl8DXFdNhCpoBBr3KZW1SeMMMbGdjDcdtIl89vgs+Ci\n2TVE0XJuKpqB18B4bFdngDsyguDAzrxoITEMbA7pTqW7V7Iwlm4c2BdTi6tv\nVME4OnO2xCGtjpCQZMJba7FFr3+QsoEhrcVFMmcCSoXR+JoBkb7m7Corl2q8\n5MciwsfgDa87B4b5gGRRR1LTY/U/4dOEh3/64uO6hRDQwrBwp72mHrFCpT1H\nkn/Owsgp9yST1i8NMbpWNo6nEqiNTmHHMfg7nFX/M+rb/fUzIHb6PgkRSfHB\nl2ViaCQmLqKSdtrF8eodki1fZWI7hskt/q5BGQ+QGLIQDTKp2i/SpV5Kw89D\nbILC5YDj6XbjFHSacodtFnV9LNTBvuNyqFxi6U0fs9h1DJlMGSlF/2AT9jXW\noCl9umkZet+IXHpKqJlq+699DHrJtO75xg38VU7EvHyCYLkX89X3z8ip1hIs\nf3p13SR2cf2dEIQINySyy7LMMcscKQN5EingyaOa6fMn4YFYx3i9jjgJrOdl\nE++gHFS1NTlS16kQI8CubP3cCnt2sqe81FhGwtfyzMee6AUpo9tyrpyuNgto\nBZ2O\r\n=cHWJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+dg+X7HbaoilQj9us9u8/7lx/2h/NA7kK/EC0YHhdGAIgYM/oSmAb7dXdumUREh/wYhiIdUc7e7tjmlp9IQgsKkA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190729221041_1564438356879_0.5523933762803399"},"_hasShrinkwrap":false},"4.0.3-master.20190730052449":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190730052449","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bf5fad44a4e3123ded0b75cadd67cf7400ad518c","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190730052449","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-I57Y1IvBOge9HG7WpwscZHhrW7qlnhGSp1ypu9+BXUsCyPBvfQjYP6aSxoKUMwX58/vMxQ1nIHViHXDjxtv6Qg==","shasum":"1dc4d5735e9c2cfd97f64ef3f09bf10e8a72d387","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190730052449.tgz","fileCount":95,"unpackedSize":2002520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP9U1CRA9TVsSAnZWagAAcWYP+wbkgooDA7ycep0WiZ4W\nInlA2GQhZfD1XSfoJBCj8vOtGoYJ93Jl1phqLG5CT2PxK8E54XhpUuq5ehQx\nNu/yCV0ZippdfpG5mdsOYuJ+RIHGrtNfnHW5c7IbXtcgRi5/wkVbn7uhwRH9\ns3HF+DeH4+gafFiG4uYAwnoacGrwKNNPbJR2EKT7H3OB0nTF1DVxA1RN4uxH\nrc/ZLUz58qB6Y6ssdffOCYxAEp3bz8jqoWt2W2uMmYBdFD1GvWjouiEvsXZw\nVM2S98kEKfpu/5PkmAwEEW4qn1HXUxdsJmZO0er328ePXqRDnSPmcz8/qw+g\npRIQIrwBapMx66Mfi96r5KlxBMDusL4VXWQ5GAHRUYraXf1BjKSs7Nheeey4\nDriWl2T62XtN9dBhR9UnnspqpDPerBrR574Lk/w440QU9aJ6Zoj4ULgvnnEB\nhh2l/ZeVYuh2L7+8q4YfGNZgVDxDZAQIb/EItn95GvXrBYBTodsUcw/YSgPE\nyfCevdDwynY+Td0XsetWaOLQUSCQ+GU8n3WjFEEM26tsAgGkHaO8SFbHczDQ\nG7EsbSNa9+aWCbj9AkMM5w72h+jAULwf58XX5piqNR2rvPDFPwvUp/Hq5no+\nq5LNNkuiGuI99aXxYVDx/oW65xGANCVsPzkWD88eY7Ee9uKTypeNffX/QhDk\n/zqZ\r\n=I7z8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoZwnMve7q9FKb2p6ZdH/g5PYaQjHI4u255lfigphyYQIhAMgxpbNpDWhIfEmDWmIBvhXqkmpEHg9vHzBrdca+UNwU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190730052449_1564464436306_0.8753343610443707"},"_hasShrinkwrap":false},"4.0.3-issue-105-106.20190730063513":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-issue-105-106.20190730063513","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0481e2a3376915531d9b636ecf92844aff17ce29","_id":"@atomist/sdm-pack-fingerprints@4.0.3-issue-105-106.20190730063513","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-l2wYZ9wQECZHZMsVoTvcVsUusD2ym6YJviNDjIsRE/Ryo3WDsciAvxDnPAP0UANa4VEVDGdDwH7vZ8Fc6XuSww==","shasum":"5dc857e626117755bda8fa229281356d4a25466d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-issue-105-106.20190730063513.tgz","fileCount":95,"unpackedSize":2002303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdP+W2CRA9TVsSAnZWagAA6lkP/3cC4y7QQAfDozvbb71U\nC6TSOqL4d9ydMFpIXZwQ2qJMGRNDuDj8K+ceafJ1liHaOZZqB7+bfbKPTaQY\nYPOU7L07E75KUYwDzXhVMBl1fNPvA2HmYJ8VhWRMnGIKHZs+y3IgEH69LczV\nqon85N20M+hKXwxZCZjhFLEDuc3BjQK5pb1RAZyc2fe3LaW7sZapA1JLa1nR\n9lchj7W6Fuso1T2cpRrlGJuSWjSIbd/qIoF1HmXOiMaQtW7a/ujQxZuAZ1Iu\nH4abJQG1sk+R5zLi8/0LVRDffmeThucoe2ETM2iy9RnrZeWI/d8P9Gmp0i8F\nK/69P3iOL2wexGmnLpS0PwOG18mEMOkyUP8hDy3+l8Lu/iHRYwQ8Re4J4Vza\nPhnZ22oggVt1ShMEICOtn+NqGXbP9N+orNvtDdAGAVT6LDGx7FouY2nKeALt\nNpyQo4G7NOHG0v5nrjMzmt4TtxOtq5pxzydn+lsbYtIEWASZ5ouMRbz9hMx5\nrZvsBsxhkUVnFI6ZmNwMKMqLbzP/JE2GWpkVkGB/fZACYu1Ga+3EYltcGhvz\nqPQWTaoTG6XkO4gK5mVDdbEx/jZl0jxvkMmsIDXE2Znvmj4xZSfK1j1ya7eU\nSJo6oXINVYbYKwKoyQbBO36HZJh0iYZXs4IqU5unUTDoXGewKvoreioJsPbY\nTb9h\r\n=hIi5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjbB4oRbEKjYvaY1DGXXA8jtJHIsulF+jQDOsSu6Th5QIhALaF1cC0lbyqTK1ozmosTk0dtHOYxHXSjP9CCRYN5u7a"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-issue-105-106.20190730063513_1564468661916_0.7569797848945514"},"_hasShrinkwrap":false},"4.0.3-master.20190730084140":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190730084140","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5290aed1ba7251b7999b2761fba58cc08061f034","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190730084140","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-oeEXbO+sXvjUIjNWXOfLsBNXi7VPvk26xHtUOW/ccpDZrDCP/BOclwqSE7BFPGpFoWFu7n264YVM7p6A+EssoA==","shasum":"79170c32f13b5fd6031b5669e3b56b62bed49abf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190730084140.tgz","fileCount":95,"unpackedSize":2002422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQANLCRA9TVsSAnZWagAA55sQAJOoykrWygefBwX43Cj2\nFlj/EVbAVFeES6SWLClslC8agPdzM6zcRgeb5EGhJmVABep3dNzJ41LCfaMX\nbxpetBDHMhr0jhJMWzruAHg0ATDaT0W1jE/87xnpye2zFJM3JNoeg58xBgSX\nrwamjZxcGGPt2B7W+9mDb5NHiKqRjjGUEOSejFeMvMnRdqMXpScR+hEcyRSQ\nh3stea1WC1N75/3bAu6GaoL/Xo87JYv54dD6CtSxCSiZW4fgq+p59M668t/B\n1GiSgc82TFQquu1RgjqYmbuOFiIGqaTn6hjWdGV8/4e/xYeyQhiIv/24N9e5\nfdWuqIJJBxSa/Pd6b5INpNCcjEIElgrpOCU94OmJT9nrCKGwYPcgmtj3Ti4n\nAZxqqFImj93KxVT9A+KiXkGWkTBNMg28x1OtMoUyo4yncnQsm3AzhInQ/WDg\nwKvcB7EYg9fz0B4a1j1B+DKE1EV/gbqQQUoZSPMDQORw8/SUN+wfazGJwfL8\n09ASi+sWDZLpKOQUa0Jp6IbO/1cak/6ZxNH5UCfPl9cQMNr8iIMiRzhW4x/P\nFspUnVPC+MXlvOAQyLF4bhmsbzNFejQpdcoRA/CMVmJ1ScgJdeqTy30mjn6L\nTVrdOm5pynBzIHUboVjTwT5sBSsX4cyflul2FNxjBMKCL6aFCYat5UV/gCeY\nlG6g\r\n=7tCp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjUJGytrgweWdtNl/YR3Pi99qwyGN88EixIfAKTPNcAAIhAIJ14TmDIqevEzsstEf5txkJh5Z7Li60Mnz/M8kLbCdN"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190730084140_1564476235018_0.857714031583765"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190730224432":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190730224432","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e96d236d050d9311bb8a0af68e85a0d667dcf702","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190730224432","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-urtAj+VGdivmpJO1c6VLs5+6pF3poFD7N842fvVA/6Zqym6ihxpEC1A+xtzStBQsO5t7+5+uacV6spJlSXH6Ag==","shasum":"a64ae054c0a8463a5f441bac30e8203d03f9c66b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190730224432.tgz","fileCount":95,"unpackedSize":2004425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQMjuCRA9TVsSAnZWagAAsaAP/j5uq2AKmN1Kw4A+wEmZ\ncOe8I2XlKLpMkObtpCdc+dMn3JlDSkRHH7szb28ylHLg+LODm7iWDpKvpbbd\nZWwWLrVAycbZHI3krPXTE8G2/CzPdsxyG8PzfxuqcDLbAEE+AzpTMWhZBUYN\nfSd4HxGgQFW4NXwHgUqNk67uGahXmQ/rpSAzfIwM8WKV3IWXKRomGjJk/YrI\n/I+ncQNmAiHu8YmKf72Iz2s7t+9uFGKMt3bb1QUFaBPLTqLD0jbCcXyrzzza\nuQXrjuzsdP870XyE1sgJcAmNQj/Gf7hznPLN8ZwQZMykSONPXz66+k82r1NQ\nW0lL6pnkz/QH/XHuuOHii9mxnxWklghME7lV6JqJu6o0emoGYgh2Qj80FBTM\nDt2npgOzUQVAVTYB32GAiG/8E4vEb3nN1/J1QjGfdlu/FAKVENUpFn7Hayc6\nbb01UcNSaR+BBjnSxSk3gEqdQTVkHPPj3Zhf6H6jrQCrlNmSwv0NFZNC0lr0\nI4DEEzJZ1rKlAV7fYABWfHS+FFYHZb5RvWW9Mico92vEF2uVbYDvSGeU4upT\nT2ZkUlUbwtsnA2kXft6TJ4T6m2uJiIEOpxWgPGrBDLwCDMAavwDThXjG7lDj\nYL5S8h6q87ke+fJsIvRbqFxb2du6h1gJxFcL+i8SZ7TsIzxL8QjVmiHrIXyk\nXIbk\r\n=PmCc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAu6Jxgz0FUkw9IrfEuGVCYhwPmkUG9lKRzK4vplqhe8AiEAgKrdmmledZtLNkQlmAkgz/K3pa82u02ZD0LcEZaJHNo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190730224432_1564526829984_0.815440672584435"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731093250":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731093250","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2c5f115abcaa43cf4644864c17173c3e86a3a3e5","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731093250","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-BGE9tp+GK5Kb4qc6JZFlj+njehAxjKN2NidON4DuxdIsUWzPtXptOw55ZNmhcbta8CtJ9tBbUgKEHQVI3/7dBg==","shasum":"db65a0ad73304f779524f4c9bcaee3c77b237179","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731093250.tgz","fileCount":95,"unpackedSize":2008947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQWC+CRA9TVsSAnZWagAAEd0P/iJ3Xwl4gUJI5WzKh7VR\ntB5l23Pxf8NJbZ0Xs9YF0pHZBfptadq5goqImwSuldRjuF7HBRwwC8v2E8CN\n3vV8INuU54htJtUW9ibInJ9BVzjMVbOAnY5ZFH7FqUv+oJmNLjsxX2zHFjBs\nDRmJ0/Hu02AGJkBdIXmPpSJJK0r/kRhvI3PIvQ7Gmmhfk8i6c+Ad/7BPsvtB\n4J9Cyf6JU0iGD6pvoFmX5seNuEbr4eZ+L63LpuKxuaDciAm4rzX/ifq8NXHI\nOw+ys2m9Ctj3dUH4DMD9trGv+6oUVgdggEuRJ5qA0I/rpBr2BvQQ1zJ8fYxd\nhIsJn65xoFIF1pt/zWrxM7PQ/NRLFGFBrffwDEbvVPNUOYpYlJBqtRwtQD6P\nVpjDyQNXbz3Wy2UE3w9SMpHc4LusNpW9lvF5yrxs8HmWY1TuQ+z77JVxFdAM\n8SJ0DJUszFewcxjgeVxTjaiPzES2L0YX+fvXsZgzUKezM1CCDOoWZ4LRnh7D\nQprq1mIfeHbqjGWfm9/EmEeJdRe4kn4Udz7uGHUCROqgmTyURQsdMV8je+tA\nJfKx4tlke3u+4FxFPGjKU4ZxP91GD5i+SrQiNSMUuGTOMmsxk3P9Tpanf+E/\nz8AgTTxJaYF6NNZjIs0xnaoqWNSeaEwRgm2TxGpnKrmQV1B+R+TpQoW6gMw7\nrUYN\r\n=jPZ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcO6zJuMoW3A3n7o6qiQMboRk+mMwQTYiccFuiWEcTOAIgbcOhhtOaB/emZobzc7CQ6A/gn+cy4KLXATfHZ6Qj4Mo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731093250_1564565693828_0.12625827446913984"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731110748":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731110748","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"78f87bde85cf086aab4b2068d94e9c382e850dce","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731110748","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SnLXrIaCxJ+K01TmgsM9QBz1GmHj4FOgDBFaZzvZulaXRGmiQe9CfLsE0nx22MHDZCCjTPSWPyVOdNbblt4JXw==","shasum":"8cefed4665bb031e128af3e4d0451cdf925db845","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731110748.tgz","fileCount":95,"unpackedSize":2009298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQXcSCRA9TVsSAnZWagAAIqwP/RemGtgnfBS8gU19hqVB\nucBOmXAcYP+gM8xfUx4fO23NbAB+K3Ai7HlUAGRf2E4ZEVzJi6fjG/u0sDsw\nzvs8O8cDXOtnCPhcSLEjifsmilomACTO0HTnh5s+pfJarKASdxIYkVjL7CLg\n7nEXDNuk1VjNtbTpTWdlJsej4jhVe8O6ZFINQMgnnlLOpSIwiNRX43n4XV61\nUtis8xmkby/UFHFZcalvVaaCLMy6Zo6IBxYf+QoMJnIZSvAueUgpDDdzSa03\ndGLR9n4Rdm/t3tYRu+V8TpZr0vgo1Q5z9ry/5W4hVpETjMsoIvAHLhaqGbFm\nDAAzj5pIGm5HOJ+3zv3mpE3qcviII8bHAcS81k4PZiQKfvUWHr+njz8ToUXl\nFt9O/TYn9+mSV5wbDI/ngxBkIFErZJbF2LmWdjKDF7UBTsRSE1b968kYt1Ri\nxI8aLlPd8hvwkajRwMMEF7GqGqL1R7K3bZJOum+5Zsij3lYwTpUT3GOLcQXb\nY9kPP3YXe/NhycoqggbJM9VuN436By8zyYjJGV2k4xn24dCJTemTvp6L8dKd\nUD8w9cfsdmZnN1llc1PJOQfIJmsI9JPOFiNbVQay1o9ycJ57sg7MyqG+IBRK\nUu4YotWILQ3rs8teqAdPH22SjYhCnKNuMz4WXk/pOHFG7dxaumyLmPxtsD/v\np5ev\r\n=ZHED\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/1/dxnIBEx4Bv1y+Bwq2OUzIBvpQW3Ro57Z9QJca2UAIhAIYRMMyoahjcrE04LVvD3ci6XjmRdLBf2uAP2xdZpqtx"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731110748_1564571409468_0.007352363899775893"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731111928":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731111928","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c6c2583678fd4e95c07b17cdff13bd4898e3a076","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731111928","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LY5CFuNxJ04pDFy880Cab+uaQmg+uRYUOOB5Vtq+2S0cH9xwoenGnGXh+X89+rIAx5wOvX/4tONEcVr5fWR8DQ==","shasum":"d4d8beb95230c3d968f0b54739e79c836fdac9f4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731111928.tgz","fileCount":95,"unpackedSize":2009471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQXnOCRA9TVsSAnZWagAA/OIQAIo6JfgRCKcaH3x3ipQz\nEfqaKMMhHgAf1OtN+/N3woktVJzqweUbr7kIuQP2B6Au03HWToVvkHRU3xxu\nSiuX5dcncvlEHiGyBoKP+tZLIz1DNw00O6abR+g3FL+IeaiNlq1e6fwRxJLF\nW2nz62SEvpHM/PRrInAQnRl63oi+xIVTNV2aKs6BSx+WPb2EN6l1uyuupTjh\n21Ta7dpFvk2eYbT1kOqBGgYjgiQ+00U454/fBykoVoX9mNXS3qv2lbJlN9oQ\nBBudEZXzwln0RnrOBw4DbJ27Tpz8QweRmsjQozLJpPjeY5banmLWA3knswQM\nLTAOoysRjsKnMuYDfIfsbXVQYfovsEkzFU8Wt5KzOq2UQPAuZKuiYwyl6LO+\n6lCI072nS7+hbCJNb4BiaNjr1h6nlUhG/Lcokvv16oW53STCiq3JH9zIf+aq\nXPKuLejdqDu60mm/O6QisKBW4y4AykFOpwRnmvFW7W7R26ngmf9y8Mtlo1KP\nERkmdRltEuoDFqzjjfmvXk8MKFyMuhIzhJ/RqVfGw/DPvPQi+nnUT4fI1+bR\nFHpA+pcX06SfNg+uNcZPZdev+GkF6ki1nHetQmQ6JhyrPwbJFX7zG55PvPfp\ndTVOaezTuK61ZXtsR7Y2Tffin2m4luTNCXp4hAa4GuUMxttqqDJtAoHMO28x\nUi5C\r\n=dw0n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxGhLOHNcqpQJF7hUzZXvGfb9Ram82rwmuGBSrSMcRQgIhAKh8rcEka1W0/qrXd7Jb9x1KSeLp5inECZGdos1HJNh8"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731111928_1564572110372_0.3019098914130929"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731160727":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731160727","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"551da385d819436fba996a37ff22e99957e4b0b9","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731160727","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-WSHm4KtOGNqCQC15HRDekxGZOZvzfIkNsto5HcWkC4OAOh9E3vgZOPjvtR+rXfBzcEpv4mz4MOCY6W1Z5WiVfw==","shasum":"55b4010695a58f1bceaa1e50c2cbbc83be2a3cc8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731160727.tgz","fileCount":95,"unpackedSize":2009482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQb1rCRA9TVsSAnZWagAACu8P/jkFTuWGwpK6fMnjNoPQ\noFMMGTqNdam8A1yOze3JYuH77ug+250lD53hu0ULFsMewy9u0Yqv+ONTy/c/\nlU9KBceLlbmzNeUNlxYfPiBXCq9Jldyuf4noJuZHn5JtLl1ZiLUovvq0hrkg\n2hM3hTbhzMBQuA83KR2FXFwYtJqpNJfeLxOUKPFTu2/SkaDv6QCOhmJjci6r\nwmvmqJWfyh1qipcOusNjOePaOSNte0QwBF8a2JxErWcFcdABpf922yI7o6VP\n1JRbHqm0d39Iv2FuMofuj3T1E3x+KNf2ceCisjFIfDgMhhBj60d/5ulyfcek\nH2btJB+pDrHJUM0ZXKTtjbk+77Zi5qDunM0kTFf66263MzN841+kZcG7fZck\nepvb+YdrMuKVkmHoFb1kpNKIet+D0UH8OTCpJ68vVsSsA1oT6mLhFj0GYL1W\n+Z0UFSmzPWWM6kspj6uKYGkh+Qp0fGYpd/pLDwv+LkeLIIV50z7BchZW7VYU\nhpRk28swvE7B1xkDhsyub+JJKjZkutKIQaX3uPIv6Yov7vD6ibN4vaJmNWyl\nmgz2NgdF7gc/eAgBZjoTxU3Q/PWf5E4RdK6s2TcUrOSY05Skjx+kGUamupRA\nLOtpH6RFyD4gkcAxR/oULa4/zGKzmuAZKU+OVYw1gxFrsk3BGwfJkLI7pJ8E\nFLsJ\r\n=UjvH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCzj41YQ2s1ltm33YkKymlouL5QVLGWWP+BYljqBwAoAIhANaP4TmF/DMTM0PpFTRaLZ7CEt20c7e1hHFUUFCQtLIc"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731160727_1564589418413_0.7989635907433852"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731164525":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731164525","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"145fd534d341fcfabfa367dd7174ce7ef39cb0e4","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731164525","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-H+WKArBXavLYW9lR5ntizoj535g+/isu+yhXRaE/dGlQ9AsMirWm+PkL+wfAaPMjmZc7eytgrBATqqt0Q9FeHA==","shasum":"815195d67536dcc1a958a6ef8d86d715258232d3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731164525.tgz","fileCount":95,"unpackedSize":2010222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQcYaCRA9TVsSAnZWagAAXjAQAIRvygqhk9DCmALUTtWp\nU9bKiRbQuf6ob2WZd4VE/zJoCzl8yPutSPPXrdmj+XSsdAhUgrXemMLsKC+8\nJzg8sB5V1qrRnDU02nYMoHa+U4kUzyiAqqNOQG2LQbn8nX6S+nuWIO4ertgN\ndZFJjZUpx5/UBPrSGg0/4m5ffgn1sOlYMJ4XH1D+vG3NdOYeb0ewehRd/Dlv\nueEZWeamw9oN9HH/vTSwCLwVvt1C/Z3mWqHFku10hk5oE8IUYDOQaOcU47lu\nQmv4Tljd8vNh8WYgSUc5eonrTsLVlYc15EW+yoKvS3F/c/PgQs/uUdWQkpPb\nCByp1PcF+ntw9q5GVjyDuAzTNWPCSnehAAmrmjT1CNQTzqAtQ3oF29azF+hY\n7sLWnNaDbdQ4bpCRGJXixy5bZC2qGlGya4BGEkGTEsToM0fXpTprZOnFrSgM\nUKfAY6FjUtAzRlYZ8TqjcSH9o5gHG2MUgQjuCYP39U250t/Mdu3PcEseCrEb\nms97OqsgT5HsJ0gcsreTvYIX0RKAG9beJd2M19fJZkWz+HmPig1KwEJznwy9\nEOIrjtXr+qDQDkXE7Ty64izfi2Fa5rrTAoUdfxSfqPN+DgbAaTW5euTB7D2o\noSmweBqa+YUqP23kulGbpLqsnibiEJCR/v4ZM+bkRYI2KPylYchZSYEO5qbB\n4FSo\r\n=3WZO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYDt6SHkB2J5KHSyxfZJ1hViSc/0niAv28ZJ5OIpleHAIgD9ubjhYChI3QcTam5vRnFh5dex9L0I+1zSQuGxxN1sA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731164525_1564591641636_0.30626113666669275"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731204018":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731204018","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"25cd7440880d3a14681936b2ac695f7e4a79e8cf","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731204018","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tfvy1k5u4r7yNORERyKuJOoMSDFUBCTUgd8UeoP2U7o6b0uasBnUyfmc9zDZ6yfX/yLvg56I+rkM1KBVE0FyRQ==","shasum":"1cd8391aa2dca20eed1dd436016968b682250c50","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731204018.tgz","fileCount":95,"unpackedSize":2010307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQf09CRA9TVsSAnZWagAANx8P/3tVGUxs3SDggcoI1FNZ\ng29sSel0E/IppcplxsUsXX9CK9re3ikWQVgFA/AmbXE/2kU/SeCSMpcesfnU\nKQ2Stw3QggYY2kXMlpi/o7wvvQzGi3At34PFfcdFmWo6p31ynKdwuQGHUeCA\nDe/cGvchgVk7EdEev3zAoIL5xZt1brCeEWR7xiybSFcN+BEV7WqCNzO1wW6P\n7n7JTOGnHDm8tJIT3pa0utwygJ2+F8nAFASXAqxFQH8xAqCPLOuMPZ59DtmD\n+VjUAMs+OoxPjw5awDDI9d2G4OQ0dSmHL0ZWPaX2JFGCqzXzD/6RERepM1wx\nKQtwz739+T9ycWoMsHhXIOssQeZzICec7vYUJsjHMpKqXCUWcuxUrmHGx9Aj\nfua/6Lq6HhAQ2L2QrS558zPLtsim2drK0M06i/5XkTf+ZphspxDyJxHxUDRB\nHKSs4H+J4dR2K9/drjTXo2Yt+IsoyBAWvXpk1j7YFYgHAOB1rhX/hVb17NJL\nqa3g9I0MYIpTKGLuMzF9LIpBkcYU5Ul6U//rpIew3mnqkWlCFbi8e6U2ffg/\nYeLmVcqT9dBkk0gmywsV9zQdOZsxEUOlbQN+K5PMSGl+YtMsYSiPBKRFmKw4\ne9DWvbY7LGCiv7uLbfCLzEmXQg+DOkUMVglA7pUWcr5SdIq6RjVW34BhcUYc\nHAdK\r\n=KsjE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZVHOkJl0xWYs00VNjtruESnBSc5eRw1JQ5zUsUDG+fAiAQDdAp2mcj0hZ1AAiSCjHsUhLNj7b9hMwihGe2wUnMGg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731204018_1564605756261_0.7865205920909057"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190731211901":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190731211901","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"248641df15d8993eba98e40a5a3f9151a6ffedd0","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190731211901","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4pwxpaVQ+/O2ImS2FmNGjr3Q4PTiOqdy2b6s06D3X15Vb+st+dIpLvKaCAyIg3EveuwNJMzT5IFt6NlKatpRIA==","shasum":"0eb3f3c7c059a891440422d7daa2b960421415c4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190731211901.tgz","fileCount":95,"unpackedSize":2010267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQgY/CRA9TVsSAnZWagAAuYUQAJHsyjnA0PrP2xPrDaoh\nuVbJHjVMFIHXB3XGm8Gs1pBupY3cQKOyoGCokCu/5EoQ/6CtPJeFG+2u9Cxo\nbhWhUwqUDGAvVqZ8iHIvPYl6wwSpay8B5/YEG5ST3QS5C2Ew2Pl77afvBOmi\nLHXXSGyWFB1EsuBXZou5DmwGyy6baQoi4B7RJrLG5rGrJEvD7d+3rFeLHRJo\nVtTIqmKY+7w3xEiczRmtP7Y+b3gSnIoGUDnrT3lLTHgZI/y4O5xZ8cFIHGXP\nhilDqzMxz85QTMvC3+NhMeFeSyVmDMEgQqqJRS/MHsqeoxzHl6wgg+GAunEF\nqhgdqDmqC2/FE0qTr781qzMVyYgd5W15cf6rbdj6jo+iz+9RbrXfifj+t7KG\n2C1K7v3SNQr1Bnv89jXyt9dYg/z9yrT6brfNYHzYzcfnwzmcJqyYhktpXYnl\nkxH1apwwwaPyyTzdfCrjj4qkEyK2IVCatQSc8ep6ZdAA+LL2Wvkj6kzVEqGp\n5o7sctnB28ia8jmL0OunC0xi69iH26FATvnzJ2DT0C4UiyNoZulTfDosKDGf\no84ifyKipyxNrP0GFJYBiKCo7/kT/4bcyvfTSsni+DdrrhhdrUeRgnAmobLu\nP8lHCUcNris9adyGVk54GjXJcIAqIJmtPujQ2+xzqe1j7TShlo9IpHlvSP9M\nLGuM\r\n=Ntxd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpkf5QXdcXiBZ7qKbczQNzTN2RieggEOuUc+aKvmYoUQIgA+UjGyp6V5gmt9pp+bXYrSTfSHPZud2kDDE8PZ75jYI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190731211901_1564608062489_0.5296062625304261"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801110424":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801110424","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"eb58e4232a63bde4a0605199701f8432623c2473","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801110424","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S2mft1nLk3XmUVjEEYHupM+tnOlOU9lXllkgV82XV8Pj0P6AqENzgiB+c6qj+9r9/rD9HDli96K+9rbDbpRFew==","shasum":"1d6ec6b4c2e7cfd02c0e4a5b5f1a037da1541e58","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801110424.tgz","fileCount":95,"unpackedSize":2011244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQsfsCRA9TVsSAnZWagAALJIP/A3gy5L9tleVCRIKKEwP\nsv++x4Lpfp7jTTd+x0qSIdUqVjwldgNvGHxsul4hp8A4efvdZsCACScR91/J\ndhMPXql58y/M+IMpvsV28Vk2DIeal/DEZgO155OJceorHiXhPGkGSP48CYWA\ndFboTMh1fL4am6bKVi6CcTnLhJ7BDUAK3hAXRY8/DfB02BytJ0PiJ38r2W4p\nJA/JS38p51/bVsgNni9OEmPZSWCOz7JPISfDfbJ13iGnpbOCdpJDE80erD3H\nm3kUcQamPnLRo+vX8rnVWhYzikxw8lOy9YDpmuK5gM6WH0NxKffyWGqkzH+M\nKLGWaXD2mDZaPbVa6pKMYbXBqbdXTCyiCXkvy0Hm5f8D2v+t0pM/VuxUqSaa\nifaj6YRFAcMWwpyHoTH6KzhycGSh210Jt+IOsJvFdheDkWQvSEUFqb30BW4x\nyhXuHEvfrRkGCrjgSKw8NDs/MllsgRvfB6qmV9Mgpm7ryTu5Tz90NR3Ta59Q\nQGUP6ucwrZVGPYOTPm4X9JWqOyoGSs30OJYMv6P2fPkM016Pv6ccDDXJ5jL/\nIAdzbl5l5ls8nPfuo1vt24PcyTT+ZjXqWnNHayt7RDpnZkfRoPLUJEIwEZFD\nTsoTrnyyrxTPbw2P1jNJJl70kkujBqbiUsSoWnSDsYjRufbY2T6oDMArLVAJ\n6jGX\r\n=EZKh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTdGb37DXOaCKHr2HRa5irrNac0iWh0X0L4JtBeh8QqAiBNhpp92mqrBdcXIRU5f6sJqOgoqIBNzjeNKv1MfGUn/A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801110424_1564657643317_0.8743991662620758"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801110906":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801110906","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ae3f4db91692c57cd3c38b2edbef9e60fe726989","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801110906","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qytB5xIs2sflLkGsL36LEyCHGVmCWqAbc4c/KvlGyUFxdfcmPeKbq4eyJVHCMj9stBhEQ6Z+MIpOOVwddau0fg==","shasum":"d326233d32e292e8227af57f19b5bf70b5acaec4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801110906.tgz","fileCount":95,"unpackedSize":2011108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQsj8CRA9TVsSAnZWagAARwcP/Ark3uJQ/HgjYctXjawc\n9+O3YpJ0Vx+tOut2h7477kFBAiIZPkAw3B+3rITlu9c6rI9K/MkPHEhWfB7b\nLXaHRXxro0Bx1tdqcF8A0ohpVCQzeIJKXdM4Z/WD9WF8YED41sgk+4AZ2pnG\nUo35/TVcGJheCH9Bze/+PoEYFTqgCTxgZKSKqhQ9FjCQnBc35BcNB3wAY8fY\n/QcrO5kZAo4W7ZENhnLkB4jun17SfCe8/uMliUkFMPRPtmN1BX99+jSCjgao\n7XqAASIX5MyZA8/j3ThZOiNu3ZXxTy5WOfIAObSeEjBSSH2itm5nkFYbNJjo\nLigxZ7gKN9Qio86AsT24On3bSiuyYpkE0dNTSsaJ8A/5UoSIMJmOIs/eRU+S\nsN6L+4iJhlCW6IS9m2PzgvLECGmbVZbA+twQPJByLT6oF1dD1LYLaFSJrxkD\nxaOh9URL2bb8KY/UqG0eZTy//kdxn9lRX6wb9TRv/GGOcfz1OU3TmzgzHrSA\nH/QNsvMQY9ZV93WBbOe3nv2On5d5ey7O3u+IbyMPRwlwDu7c6kcShq0wXpqh\nlLWhZZDWG8aEOvWGN+nI+ombFUmRjzsANPJAipFFD/rjaZlx+0WplQe6riBW\niqnwbSDSyzaBGlNDz8Le6GY5fYu6tB4X2GMqLD6cPBS3cqNcdr/e4XSXNL7k\nh9Wt\r\n=Dago\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAGitwfN7yq7YIuRibNxuhHaZMZIXpNBwIdBug2N7urwIhALLPEBMGORIVGDILt8Wr/uA241ANhDnKuMHy+LqZo3Bw"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801110906_1564657916103_0.4613547497507966"},"_hasShrinkwrap":false},"4.0.3-apply-target-fingerprint-1564657700366.20190801110954":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-apply-target-fingerprint-1564657700366.20190801110954","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"57d792474cfbf8215613d5a1eb3b0b2b21759505","_id":"@atomist/sdm-pack-fingerprints@4.0.3-apply-target-fingerprint-1564657700366.20190801110954","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/NP31cv819HaoJ6zKBjZTVVPHwvx4f/R032LnbIdjKCI15GBu2vRSC6hnulKeamrF/V3kLX3v/oMOgnsSwa/Pw==","shasum":"7fc60970f600182c74eb4a21cf422eac6ad154b3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-apply-target-fingerprint-1564657700366.20190801110954.tgz","fileCount":95,"unpackedSize":2011131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQsk8CRA9TVsSAnZWagAAWfIP/jIfc1Ng73sv1geceeI/\nf122WGB3NAjEvzvfr8nA0ySEvzhRGM2QOVSH/zGfutS/pi469/MllhrYPReh\n8UbnUN0ex0CpggyGDwdWhjjPG9UJ+ucBm7nlmVc7ky69Gr5JhZkkbhPKk6LJ\nuaMb0V5qxov4DjxbpOHq9ZIukdCustUdEm/oakMCwakEsdvnFIS9Kb08lOv/\nBC8gQ2WOvcBZVQi/AXQthb5dDEe952XSp0ziBixQVLVbto3SI1e7VybH6VVk\nT71QJsO1bRkPyFxuRB6MZPOLwYid3zcfLbWyr6M7+/qTIYgOrZSQTCDvq0O4\n7icj2tEKK58/zXei0+SAEyqS7vfsfW8Wy+GZqkcg3niWRB1B5zINojAxMnMv\nIuSjb4vpKx0WhU6XdpprsTk6nKfiOSINY6Keb2Doue6iLQ6QqZGhIlbuKIcF\n5Yjr979948D8Exuy44w3G1Q/cY+EMVH4eG1XMqR8bkEV1p7VkUJ8+boHzOMc\nTIGhSMBjhJzYNoWaYFVaetIOnc8Q0ubd+wb/TJK8NoEVOTrowngJ1upTql0K\nUa40dyo0Y/jFB9rAKEhHt4Zm5CI9jMOwb0pHdl1rD5b29mslCZNN16Dic4mw\nkAujkaSRWv27HcrkIWWt67DVAR1elPnt0UA87rGpq5leZPYM4F/G8A4AAn3x\n1DxL\r\n=BZkq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNNn2KT2DdW4F3QqLJAdtDTjDnrqgR3wGxKQ81Gpx5eAiEA1SjWag4kW67blDpqLPYqS3Wux92ToOSFq2zAywSyShM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-apply-target-fingerprint-1564657700366.20190801110954_1564657979904_0.3694681764720824"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801111625":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801111625","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c7c46ca711573a88cef7f1db26127771a69b3377","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801111625","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LEeBW8dGXlO1UCZAtC8B81zFzItFukSRMTaCgLKVm2dVHRKBYK1gLX6519GFF7W8U+tPSWuimkfc97BSe6JL1w==","shasum":"eddbf064162a507700f3a1a73f79f0ed102b884d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801111625.tgz","fileCount":95,"unpackedSize":2011106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQsqGCRA9TVsSAnZWagAAyOgP/RmyGKKkTbj60XvPsqU2\nv2XglVDdCBCenUBAxXSHLgOVU9pEsmoxIM1GRxFB5VdEl6S/eN15rOrYyEkc\nV3a6DwbmCsHeirximp8Cridryay13a9vc8XyeA68XXZoUW8w2pU1fRTLMTs8\nCYhnzPdlYaqaSujllxUSHww4PsZTX3XbMU+I607dhCSXPk7HoGwdhaCeG0O4\ndhIJ3Mk03GXE4gfFEL1y9yvi92rLa9rOOjwAtFYurdl7xd40WjYJMHvrEBW6\npKEID8zt0361UeC3qcZ5wY2Hi4bjYMJrPVXXcF60n/JtH6TZuR3sQSlfepiZ\nz88AIqEm05nL4Vy0RGqeh1pPo4YSGuD91GKu++tqzA39tbiX+aKo6C9KSqty\nD/knclxfQlN9fKUTshvPtgSBX/wW2kW/5xBaG49vLTKrJg/Q/OQMzUlOSbuO\n6MKFtHFDZoocifONQTqJl1Efi/mBw6G9Qy0VjYX3pJtrxotthBSq9LkSRnus\nRwqu46HlPOkcmSv52fPKBPx5304ui+Db4KJ/KU/GlgHSoaAy4KIp0FCV56/S\naZgBzPgY1N0AocIu8Xo1rCL5s5N3qHpTJ5rJix0iZEc8JBs31gGAL4yLOL/D\nV4obWEwim8vlH2KuL09UiuMF/M4pe6dbX38u6U6fgrTrb62jctosgGjaG/ZC\nfKiU\r\n=813A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWvTMBjaT7oCKN/Utdsu3mmHm0R22bBfaa/gaeBw2DhgIhAPb5vkakKzCcqladmkXTcH14esdCWeBJ6RbUjJgdd3ME"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801111625_1564658309633_0.7579798175911727"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801154049":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801154049","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"76b79349ba3ff3b3ffbaebd0c278bbfc2c92650f","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801154049","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kuI36RWeP7VGhkfPhJV9LQmfyzNOEmjiS9+rM8J9G1ExAGdmILwoWFaqQ8pOZ03kUJ1uPv90UOwvI4zKizoMXQ==","shasum":"069c24eb79d2323d71c9d6b7fee0e9d9ff4d52df","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801154049.tgz","fileCount":95,"unpackedSize":2011693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQwieCRA9TVsSAnZWagAAJVUP/R3kNA4/WqxR3dLakSNS\nANEUTo/H/JkzdKPmV6EZXaKK4bwWwB0w2EvYrEz9taCQpCwMypJIjWPpQAqG\noqvmJ8AeDBF85Vwxyz4eHrlFXM8xVbog/XRFmesyIutd+KwLUk5PjIDwJh6h\nImaSrbygck1hg8B/tYD7U0VXNQGvg3Rs/7q2NN2iJHCxPq69f090nnj9DxaM\nkmTr0H35Vicj9yh3tnvrDo1i/0Rl4Ml9AoNf+EYjE5ZUZqhFH8gDzv1bCQVd\nZobysC7uEIYyMMvsYp2DC6nzcbH7agzTTqpUqv7qc9sIe4gheAj9UF+S2cP3\nFzyLfd3TsyHBXTr6FmbSrBfig/8NNNNFBsvKg4NEhug2k8KFQ/SuLtOshJ9S\naexjkUqqtKJUJPLLkHQNH7uqEZPPWmpEa4rpgmFnlpLjYFrP9P40+kPvezpR\nOdqaaXTctSwyYIHkjPNnZYvDrS5XFPwSmT+4XEStj/pYX4QiAOw3ffJJESvV\nxeqyBk5HuYVGsK5q5g9y89DuetyY7DQlQDfnAfU6+wDbMoweMqCe5wtVjs8M\n5d49sMgXEmTbglV62b3jWicTS9MOFVmaNFLEn/ZB/BKfSMldWhAA2yDX4JD7\nwLSxgcyLqmUw4baMKqoKxOsf/ix24MmXt3OYzt7FBlo2CtzXHpmazjOnJkHL\n8tuV\r\n=uar6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4hOIx+PEvvAiSaA2bR/q+LxWTNKEJnL/JNjw6GoInKQIhAK9maSOOPfIW3wTeu0h3/KwdvtT4OidjHRnTXT6/sLlx"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801154049_1564674206215_0.3774378383267367"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801175047":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801175047","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"992c5134db861a5b32a9f6b46d6e9f218c995e4b","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801175047","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fmENm+nDp08rkN8p2xVCp4eq12n8SqshVujWemBelTrAgfovmcpIpwXIo8MFVgEKHm0ZJNozomRihTCy8Xrf8A==","shasum":"88a34c139f0d66d8d5fe862a5ee4f553f54572b5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801175047.tgz","fileCount":95,"unpackedSize":2011683,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQycoCRA9TVsSAnZWagAAOvEP/jtJcHRjqp/pJmnkcOp7\nOeepJtDaGG2tafJ6A63izCMtO9nr8lj1ETH8i/mnW/RIejGuMZu148kckFop\nHosC2gWIlOWgM3yeT1NifHWiH5PskHhLSb9Tt2eGdH99YOPbPyFL84yUmbKL\n8vvpCVek6VdI0OaDSV0lw+GajBN6OGEcGICd5KO1yRkzYNJftOletBjIQNC2\nq7G7/px76FDSc9vf4gHlliYkmJ7Q4QbtlTjaVLs/SW1zosuKWnxx+1r/z7ud\n/Y9J2w2bq9G8/UBLVCzVdoTOGQwhoMEIlrfd0qgchhPypP1yx9+E+6U89ZFJ\nwhos0cW6lU2HiJdSjn4o0IQo8RGObDH819vP6dS+4uJh/250+b6YQ8jIUBMe\nGvlT5j1LwKZnTUQYnIofeayWxzFw0fD9O0/cfH0zfZ2HafKAnGTXFBu41GSa\nOsgDUrbSGjGs0MAHbJwtG5GajMLqvrhxhdGFuDcR9p6KALuxmM/QNdnutfxD\nA+fyNXqm7UiZj3rLzw2ZYmgnSWk+pfQiJFvcnAHdkDEsftayY6tDHB+3EIxx\n3Dj3L1a+on0lgvpebYdvhJsdx9eppmWqnBKza72EwHCxju61/wCbZBkifkdw\nXjWQLRnkmJbVTohgcx0nZ86u7Uh8Il92nJTn48VAe1pf0l4jNfubfyPQdLOR\nv+ek\r\n=cSRQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXp2W1UBJR4FgAvb5Xt6orv6DsOf/bSOlBVi8j65AffAIgK3wZtevck6d/ek9d5Hwe0aPfXlf9ZgBZ8GeWG/3Pnn8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801175047_1564682024175_0.5483587114506847"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801193608":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801193608","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"82415e3d9ba0bc81a5f6bc6b3c959f79ca88bf4b","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801193608","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-H3b16o7mMzFFJXnCl1LSst3j8l65W9qyYpmLAqJOJ5CvNJpxt4xF1Yc/+GcHxFCBNUgp9MPlf88RTrVFuklgeg==","shasum":"6887b5f6b03663a3d891beecd999c2cbe1288c44","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801193608.tgz","fileCount":95,"unpackedSize":2012161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQz/OCRA9TVsSAnZWagAAzuEP/iZU8GgNW9LpNvzbxrnG\nQNrmnSsE2CY3OWiUvjdX63PDuU4C3TQ0FHIfurF+XI2XVC+x+xjXgYZKaCHF\nslll9juyBJ1bd4MyLi0wGdxKtVaC7wc/Ll4OA0YXNw+pPNFMEHhcpg3CdE+A\n0UK7MNPgs2Xch7mP45xKasT35dAlG5ACir2G/h50RVs3jgzz4KCh4EzqrwNA\nPPhEZj/wmXLubebIfuBu5uiiDrIRx/8ASIKbxUdt/TO78pBUMHk1ENdmqW+4\ngVbxDgRuU1VSAgzGrTJcbjWSfM0o4gIn+MYHEZq18FdB9SnsJKjYgvHpFtgV\n+GTh3w2Os8dL4tIhW1BmwtkYllbGlMFh1pLFgOv6jYwiXqmaFqvXt5bb2AWG\n8JyILTJzvesquvJtI1mMjd082T0WSDGYZGp0+yOyNAYt9g6kdbii8zdwYUzB\n8C+x75Qz09J6BoBtzECR2gbVqEmLnbdWuM7sjzwCInfr6JszhHGM1oyaeQIr\nhfzWa4sBRvTkDT5m5bYwrXCjHwK3NPCSk3Fx2iXf+uD85iLOILEwl+GJoDX5\nelxn8Dscu67elPRTd8Lj1DaaV4uH+ydkWH6AUuzJ4wslEpZUtzFtC6dpkWUW\npaj5u7EMMVgucGIuO1+hufAjqDpJEjk3aiQNO2w7Q2DuBK9Sj/tZnkcmQt50\nVINT\r\n=hqKI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5tvrh4BBpNGSZBRKmt4GhpqdqUJ9LVr5dnaI4PQjHrAiEAqIM9XZ88PtmdxY/1979uxUdEk+pz2IsOo2CfILC/euA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801193608_1564688333106_0.2023196169327277"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190801201410":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190801201410","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"982184e381a2c12aa02cb05b736858b5dc9d9868","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190801201410","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ITkBd8bm86rvgZcP0pizFZgywHAFlesk9CWQSaqqB+I6FGhzx9iAg0tlKfijoB60pqXgMRG3Q9okwIthWrcrrw==","shasum":"9bb6828c667557eab2bc97bc58ebad149115ff16","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190801201410.tgz","fileCount":95,"unpackedSize":2012166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ0jPCRA9TVsSAnZWagAAHlwP/2LaJvwHF4DuZrp46mPn\n0NTG8aFBPVV7b+e+NwgHmL7EiCGzpaRdia1xNkPWNLn/n9LCkkD5P91Z2IBv\nRHqYQeRyfcy/ZzCMHaYYyt385/QCIjj/BmuVCocn+wUKULPYQGscEfz6RGUB\nQ9AzrTf9YAtZY8COpLvWrkKj5WDFC1fj1LN4J4x9PVnVUkjEQEjBNX2NlTNx\n4nmenQPTjdVKiD0iCulpNh+HIeH255/selAy3ej6rMp5TxZjl0xCSDfFtPFL\n3U60CTtPmKvSp8YAdf/qzUtjZ0jVRQkGbUB/jqlvX18N+cJNaqBmOs0MYSsO\nmIAzSL1fFVNqHFjTQKRsr6skzYPndK0gaqjl5LLCIWWORhHvLiFbyrqoOsEo\nyTc1nYHCCdpUqA8lZez91B7N29DcA3agZOwp8WnFlPkICoaZ3TZsXP+Cch1b\nMYezPgrdxTHzM7cMdp/sPDAShv8NzYo69tncUIo405lgHj553RSqx40LqrGt\nqOrEkqacxRfshpfAw/kCMZPDoXSqLkVdRM6pNEhJxnng75xFDXmiZZYw9lS+\n157SmVJNnY6Mm7HKpcEm+2qrUZoIpsfi5j7iY55M9VCudaomJx3A0RaJ/Sva\n5yp8FduXZX2V/nCf35oKZuGO+qOW/ZSOt32Y4PjW0AaevaguVDlNrAGPqqL4\nFe0o\r\n=tjz8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF63Xfe9lJ2029pz4RxoZlNcFc3zJTOQy9Reg4M1unIkAiEAiztKXLMmz5GoCeRsF0hzlHYMPcr4o0DPVRSTYKR6JpU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190801201410_1564690639368_0.03746967066535922"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802064812":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802064812","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7ea36a8a4eddf6b22503ba58d646d919abd9ae00","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802064812","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uAvXPZMzoHpyWzevoQIVybBe5LzONqlm+vwlKi8QD53QfXm6Y7vg3Nkx6yxsVMuTz4pev7I/rf/b+ONTH/qgAw==","shasum":"d5dc9b0925e692ba9131cfaf795ef5dbdcd534f5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802064812.tgz","fileCount":95,"unpackedSize":2013938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ90xCRA9TVsSAnZWagAAFS4P/R7Dm5hIR6DVvHTQ6QUm\ntJ6I9zdZ+6mnhX2L028bVdkD/YQ+V3Q7+6mqLvCpENEke1MW2JnCV7iUoEqY\nEfz0nYFrA+vBcvKbqzb2zyecHuwRg7+PCq9lb0Sh/5gnI4T39t7rHA6Ory3e\nSOAXKolgAZPfOO7ng6RQLZJnUCVomKGh7XQcgDjdP7bxbmTDTXYWNox0Rk8S\nkVMdAhFUbcjYnBNEN6uccCO7ex5zLimvS/BkSfdIMBZIX7bA9Y6fhToSu1z5\nID5rUSLGR8huiMpIN14bw1xzltGuP8Uoh0KowXkJ9qUAOjMZ9U95qgjPlFGd\n9U7fhGU2HAerehH47dAIw4jrvw5pbrbtBiKroo/iVo/f3bKHaKyy9gNmVoV4\nS4Dnaefwfm8J//8KaTyCqy82Wb22FC1dghoOt7x/OR9FWXyAhamYchX7rTYX\ncieRgoKxvCuTVNUXN9/1mNvhW9nLTO3LsjL4UxSbOwAsxAqSP27G3OgwBI4c\ncnFfA2rvNHQWRSFEY8Op1G6Ox2Vid5/ZUv4tg4FQM4vNEsFOVv5TUPAeaPzg\nOCKFrdfzy82XYlVI2vZJYOfSopQguetz+3LuaEDyKtQy5eFyhb8FivaMsJzB\n0Un4x/OlAALPf+7MOFf23k1SgSw6H4e+9XKT+pygvDYSxF+HY2Mjzmx49ytN\nOHzf\r\n=I7LW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMYkntshs66Of8V9g0b/ECTf33hCCKHOcdO9EPtYCryQIhAKLT/7fJBE9fVSBc0URpXb2/hzr9zuDbs0L2iCY8vV6t"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802064812_1564728624858_0.3028477150581539"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802081103":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802081103","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bd7e6d5f0b33c7ba41121997ab094b9d154610cb","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802081103","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hzS+QzybIBg4PPozNEKh3O4jwo7K1zksG859SIRXyOkTOXilTMoxJ1SujZi6PAEc5NKqvIaT416kBUCDRv1xSg==","shasum":"27f2c25bf656a3ccb1fdf0b74248a6601ece07d0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802081103.tgz","fileCount":95,"unpackedSize":2014798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ/ChCRA9TVsSAnZWagAAroYP/R0fYvH/UN4idZQF8O0h\n+7vznT+EsNj927m7EvoqIOEosC+6c4kONDebPklsHwjXlfbhV/2Qjp+xKyWh\n816XsYPR5WIu1d9oxn3vf66QMjwYPBvtOObdbkSQnXRv0pr7JMorWK5tDO9k\nkuCQWu/aD2kvjWKohxDTfhFIahYmRyMAegS1f6ZjEFs9Ojp3I4cDvUS2yocM\nSVDEimmyK++iHMsy3cJ2/KB4E6QFH955XZo670OV1Eg6Ewq9hzYZG7sBqWkY\nlPTStdM3CVFByayE40QOGxiDu98xIV1HzYr34j7IpSKG/+F0Msru2GKnjuvD\nllpk8Sbsbox4ePpOAJkW0DfSXirIFLv/Rf4STApVnpZpJ1KxjYsgrRFBx3wA\n1qoKotmXKv/ceKimKai7aU+2JkVgae8HnRxWYiJwfII3jtn2BRTj5KI7jO4I\nwwX7PdYlVR/WLfpS1tAB78euMEzyJX5GdhhUafm3R58Bq4wg1Onvy9f1ojAg\nNzc5JATIR6Rdb+RQURoljfafx/sFa2q+FDqZdUlHz7OYO9VZKo1FJYKs23Jv\n7WRVCe3+URgKsS/XRcBnXPWeINfolarkUkj/HpOXce08TxuxZqb31/RFE8NW\nmfhsurG3javXAw7bM+jDbxUZLB8X+vaq+Oj/QznR3IdSvYp0HdQ3OU5Qs68Y\nby8m\r\n=6XmF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBb89YzRUUlREgZ1LrfarotHkVdtrEcTb9tR0XXHjvHzAiEA+st6swVoXyokoD8m55MNIPIUXjA78iKJPFaP8URAFs4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802081103_1564733600543_0.09847614774489966"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802081443":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802081443","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d91b9b7a1ebe8e67fcc1446423873f614a0b00c8","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802081443","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QWlp0rCrz5K4wmaWIyhZcoHGhp14od8VbJApM+T+Af9jEMA+OUZ2VqMoCucZ9rTaqp3c6G6pMxxZS2EbIMdsoA==","shasum":"6050563a232464ff491fe0f6253293e5dce582ba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802081443.tgz","fileCount":95,"unpackedSize":2015422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ/F+CRA9TVsSAnZWagAAYPgP/jDkg+qDUDNmj5n/lTuB\n4MwRmD6YIHt6vNdERbQ12lBRDQn/XDCbb9S7J6jUqmyvXMKNxXDc0pTBKelB\n5R25XjCSHpoRRTwqXFnklKlPM8w9aXAc8TiMgVnlFH2Ez7prt36xQWBdIVRm\nG/UBnvIM0yPok2CYTduWG1W7nYM+bwxffVu+0qMJOHw0rh4LwNhXU8JTtld2\nllaYgyd0HdBngGelLbM8viGUBj+aBCeZruzocVKwy1DZTJy68KVFK3rCUKnH\nEsSFSSCeg6af1PLWEx+KYMlSVpI6KO52x8qbMlTeCM7aSFMGSzpjJ2klJHBo\nAaT39cH+0yi36Y5P9zJhR3VP4GLsiBmGAhPAqEV6BNUs9FTFgFZ11Kc1n3gk\nmQ2bgwZTeKb1RF3+ELxyCwhGsVg4Yhvy7mWRsdbbAD/f+bo8DNoRR/CsmEBg\nP51Xboj/0SqINROplNGaz/i7/i3u4KFcMoldY9eYBnO3lezWn53xdDVCTA9N\nkP+xZFOBUVeXZyUjdAwOhBL/i8JYkeE+/x22jB1WjS7SgZElWWYNZiS7v7R3\n86bG2kbZNEGBat0FCGbMTImXfqBacu3mVoVEWGThrh1YqlejYUHJyy7lcSPj\nzPQOKHDODam3XOfhID1GQIzHi1V2wolVc9wxfiW72l3Hxoxg+NJJ+TCZXc5i\n2QSQ\r\n=6vyS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIErj6BnaVOMepWmjtq7eywGRSvjTgfYJNc24SkJiKvLWAiAo0q7bjcV4ZtAITnjEhBXJGA6Dapibo4PQ50Ov5cwZNA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802081443_1564733821748_0.4660495525844597"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802082056":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802082056","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"990ab589a400bf54b73a85bbaa4a3b4301b1d7f4","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802082056","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Kj/GhaSOdvMISP/r/7iR1bNq9+Z4jSTRSxYlFntIdbLimBgh14pt1l4U+HsYTSE8XeAuTAuj1OZTqbtcGXuSWQ==","shasum":"fe924990176b2d371bf1e8ccfa7c3d600684d6af","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802082056.tgz","fileCount":95,"unpackedSize":2015843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ/L9CRA9TVsSAnZWagAAScQP/jufVJF/De2+EQ6hFZ9+\nQqDiFPKxSqtUsL724M3ZqHyg2zTAO8gdd1z2XatKUjkpGREaofZ7tquc/Nsk\ndoxxy5ZWjW6toVJSKlnZisR1SCad79nWU+qBbF4GVh0kYyP1X8RqYJIDP5Yx\nVf5kKBjciryZpGyDnJK8NAjkW96ZYtUmBn98eqsRiu0ZhSdtGsdUT1yTc1ov\nCmHygcPhwsDGRpAi7TajZ3yKaFlm0FLc1CXriWuWBNEpmRfBhKfQYl0jcpYu\nKEVVi6Zo8gih3qeD1n12gsZuHAubxN65OD7QMzjN6uk9kwqqXjlsgBRiFBCh\nzL/U2KgNkpoNV/exJ8SGf4vN2iKd5uuFCEg7QSNVvAw4RhOuFqkicFYCKwgf\n2QKQLvPKM3qcmUei397k0FW4DpV49a+ZOq5wgMTypqLNUcum1rfiAu7/qC/q\nJSgzMkqvvJf/0bFokOL7LDKd3lqmmHHrBKBjDc3Gvzy4Dw3fYK4GgpmKxnIr\nMfIPBuZPugH9VqIPDHqXeuZa92w0xpiT4FwZ3h7aHqSlCA0X1g1+fe3JxByL\nLANlZ6mDYkcDHStq1Jr9mXZ6rkfNQqsIOH5YwsKrCxRX9pTEQ94Eh7YKrEFA\nbCPpV8fmcPSGVoTyk8le7bYjc4gstTqhWwMf4ppDeVS1rh+bMsy/F0XI8oTs\n3F6I\r\n=R0go\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbTdFlyITj0bT8d8u1bWW6UoDczeUlCSyRnfp2JahDlAIgMljKeYt17GQKxy+NI4T2jNNoIkxMxsb2gMeRe/jZR+Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802082056_1564734204494_0.15752181772541918"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802091023":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802091023","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0b461afc547b09c6dfe63054521bbebb262d6f72","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802091023","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-piY3K5D7U7VSwC76Dc95kXvX+AumOtEfx9BFuhMZXugPXdpPaaW7gnMhZdhSulFhqAOFLgTX4jF5GGsdbzmBVQ==","shasum":"497a17751503c977295d38cecaf749b0c60df728","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802091023.tgz","fileCount":95,"unpackedSize":2016081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ/6RCRA9TVsSAnZWagAAbbQQAInxJPpD+wa0xChuqdxM\nuELM8wnsdyEDiPFkqn1xlrBYl1SMWd27Cyg9TCxhBssYK1I+/rTXCbdSEQ9c\nMGoZRL3ELae+r8kJFdCHebmtRnkgY3+FRrW+frSVBT05/k79d9rGYTzHKroE\nyHnij76Su/T2CCHGrX6s6VkIHkuN6S+0KL5SqmUL7jHPu8r8KjC4a1Of39BH\nzzfu5uzbdVIHLjHe3g+IoKMZ0kzE4psnvmFallOnSHkQHRQKe5cIeDgO9RwV\nZ71g5yEJfgS81unebksDCgL/k81/UvuBeylYDYwaFeNH1aLlhQVXGT63Z2V3\nFPA+mQet/oDSrMqGscJY+99KYFVBg9fFioATJZeqWRjlv7Q8fn/lta3XiWTF\nxSmP770ogpahjGIBL57AmS+S4MnvYw99OEy5Usi6Ggfo+w+agMFud0uCyOqb\nW7ofp/UGBi/3M/OZGfjfBcMmCpnhw+C79SLMlq2q9s95486Lus9iz18IyFgH\nijNHJw7Cp5vPJbYndeOqBKBjpiOl2TiL95Yz6wTX2Yn/EvgqDcWeZ6QWki4z\ndhjuOhQRMQQTsHoGG5cCQOOyEjf3hMxIyG0aU8xsRyq7HaX9A4yKfGPMpVNZ\nPvqxncOBPcunA60/wYcGekjhG3AjIh8Q0evS+oeQkAVHtf249ckH8j/pPtvD\nc9rl\r\n=wC2Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClWxP+eYdIAdLpKC6+RJAgvHRAp5wVAeglaejcE5rReAIhALCk37GkjXHY/6XvJlZFgR+5IYkc8dNPctQvPnNOYmTx"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802091023_1564737168250_0.2551251340959162"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802091704":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802091704","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3669cdb3647bb920af5fcb0255648e46dbe1d20a","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802091704","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FV3zQtrt+HjPgv1f4ZOi64iacRdPaM9nKplD4hyhi6t2L1CGWophWwzJHeYIw+zcKnFEPOrYxIfCAS79+3wssg==","shasum":"573c942a6eb68a262d744ed1099639eea34efe5f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802091704.tgz","fileCount":95,"unpackedSize":2016121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRAAWCRA9TVsSAnZWagAA4/sQAJiin/A0jtwODY3qbyfW\nrsUt2dZReQgJNQPDd/eTVDdeEPH3C/OPfksck/4RqvxoZYoLGdCtgKesl15G\nqHQEo52AsO9/tngXcuMe8krAbl0I/1RpHi61Yrrf7899SSXUIxnNJYJXD2Og\nL/A9WMPAK81UjFIONF7erhIBYrY8+isyKXKcLa0knCpn5m6LKbtKD/hJWaL3\n3QXz+vL8nu1rCADPf7Y/c39MjwZh0Aoni4fB8nSjsK64nzI9YTxX0fe6T4ZX\nughgf95CbJb8R68a1lrd8AJIPFcY2zYNHpVOi/ZiN8ak+xnWcYzDUyYkzH5i\n3+ZQ2QSNU2HjRH8OlZXJAn/YHfpdEgccjUIEVWIJ1oXVtvQarlblucgvfEo2\ng5+SBP5zzePWr0q8BvA2YS6YUTNjzmuE+f0h1JlaLWU6bLr3O3CFGGuwf8mk\nA5Inq5cdlLs3vQMWBkndagKGVzVfSvUeuXA3YR7jDDohNJEP+lLRUfdWM8k1\nzoN3mu3yr2hghN799zPi6E4d0SMze8XnKLxTOuVL8VJvOI0d4o36hDEZoUHF\nuW5TTvCR93NYuPRas3/qCPc8o9FxFQMxqw5DjQHg8o+9O2WzBZ0/sHV+pMTN\nx69GIwB5EZMaQKeC5N9rGsJwDBWdC8o0sqfgnXhaZiDCU5H7gMv7smRPfo1S\n6yU8\r\n=IGHz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGax5paayi2IBepjjHHMG5q6MB0qf5KADxQYK5NamlxBAiAjsZwu0Y/1mh1hegw7JT6uczdGSDCHxwrubcR17CAuNw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802091704_1564737557671_0.643983151900563"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802092748":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802092748","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0fe9d9c1234b3ddd8727bb25eeef810d90c550fc","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802092748","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-odo63H/+fqujSoxTJrukaKmdPtfMuDsrRSZKtBX2Umt2nwQYoKTSQQt5bzeBL2ERTpd3XtNjngU4wTa1RqUtsw==","shasum":"752d3b5b98864e76231fbdce401c48c7356cb84b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802092748.tgz","fileCount":95,"unpackedSize":2016489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRAKqCRA9TVsSAnZWagAAyKEQAIt3bV0JijZ0JExMt/gp\ni5/6EuLhg/y4BmGAXBwGmtXfL7D8p6G+BNOQP8+QnqegSXmi89q8O05bwgMH\nu6JW1bK1eFO9I54NcjV5invWed1bkXY0OPxKX0tFMmeguLGk88/qOiF6Uz/C\nvXfOAiTjHmTQCFdSllROeFldSdsS5plPIPnYS9BNByjE1qBuUK0jECTGSOtq\n0BzpKc8BWHj2dQFphj4i6lFY4pGV+ffaxtTejsOez2GHgH7PS0n8P+z/wwhK\nl5OCyrwdM785UHgaM0TwZLzGjvkjjTGwwz/lbsmDcu9EPWR2JROmNBXdPLmz\nlA798r1EvEPGVOjooe1QFf5zBR2SEC1v6jy6Y8tl5bCCt4braQ70gbglbC2d\nA/9DNsCajbPses/aDPqw2oar84DgxzN2WHVA/b4UfQhW/090/Ls4zme7zgpu\nfEH3C9EQ23W+dWQUAuNoskOhqfowaieqdX+qr6dnCd8uTc8zr7LyV/TPjwwl\n90/y5gUWHJCBuP0/gHYbbcjVXLVDkyt4vUdHQArIKZxgnU5OEyu7UqP/Z2AK\nbJqgZp+9knCUO8li/DT76pFW7DfF801kGhG2OEcHl6pcwFkN1ViFmiGp4iFd\nltgx+nWfwmE85NDKjN9XXqhLxl768xE9KdQB4HMvTGSPSx72rexQrTTEselP\nXQ5P\r\n=2LuH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmYyzJEz9hBnwp4ORZadH+Hg5NL6FcnS81IyQiv7/g0QIgXeQv5EAGiZjYUJcLweqACXUhvrDx1qwV2tdMSCcxkEY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802092748_1564738217942_0.7306108469688177"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802101637":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802101637","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f25491a2b855a3896addb59c93c086449945a8e8","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802101637","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IWF32qNjUUBQdPPGCcOpKKa37l515j36RxnJG2OVvW+E5kba5OHgeSdlLibuvHg3bVn21tuUEn9aoERs0Dq4Ug==","shasum":"ca158e56eb00ecf21648306841a8103f0d866418","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802101637.tgz","fileCount":95,"unpackedSize":2016488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRA4LCRA9TVsSAnZWagAA5HMP/Aoj9lcVxgizOKGHxZxV\niBtmgY181jjQSXyq/3qCbfMfzzg3gKkzuoqTqzayo3hwYQLYbYj45R/FBrUa\n4ewFecEeK4DqsR7FoNyECLj4WY1SBd4NyNLbADzV6EP7KVuEhANSsctrUR9R\n/YE7U75NHxBwrjIIslJ1sX1HqEof6zY0MIE9FaYoRws2Wf5JzdWxJq0igyyV\nDGvZgVqFPIAXiARqcnF9T4n3fs/GSoy+gisHpVZg3gwDMma//ZnqNz0h597A\n0zQCpbB/j1Aho48xTKKUsmoJco+6eweAfbVpJX8Nlp/m8smz/zn3eOEsk4Lb\n/Ib/kkS1Xnf2CTbHyCTQnqi+THNOYZ95ZWYpMISS8LELDDl4KJ1NI9IoW0gK\nRqzpvbStfhmaRfLHgFauQNv2SVZ8DoxtOrsaPp1w7osME02wTigT9OQlaTEn\n4utY8UqbURcLHyGu0z/nMgBm6DhETO6z1N5t7qYf38M+Ci6teXs2KDtcvANn\nqRdH66zU4JO4Ima25zI9RwwQpf5BMLyOQ0oBtFbDHUTtNXs2etB+A6OqBkUH\n41U86UcvBCPu5Rm13gqCdJtC75fY2k9joMYtAn3eMNCzxiJLaPHoPjlkJDtK\nZcvI8OFcrVW2ZIoILCClwVLCjktyGCjJndv2/nDZLnYw3JC9XzICoFqpT/9T\nHWe8\r\n=EIfo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIArJuIwOiBFE7MV7KCFhzrYPLfsH6dJzlPNQ7rkVjWlkAiB0qDWtiCcGkffLgYAnSj3yZMC2PzCSR6wl0Joqivt6wg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802101637_1564741131178_0.16088428025797974"},"_hasShrinkwrap":false},"4.0.3-remove-global.20190802151008":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-remove-global.20190802151008","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1fa7abc4db13a8f8f6debd3b079c2112843daa8a","_id":"@atomist/sdm-pack-fingerprints@4.0.3-remove-global.20190802151008","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TX400uzh/EAPUKFcVA1RwLx5B6aT952/PwtobLQU0c6kAcPBBleSBu+49oRdayddx6LFsmadDIW2DWhcKfglKw==","shasum":"a3321c62502cd9388b287fbb5b2a97763614c5e6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-remove-global.20190802151008.tgz","fileCount":95,"unpackedSize":2016522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRFLcCRA9TVsSAnZWagAALpEQAJ8eeXUqhrnIKpPuBQJS\n1rQsZaroDpmSPQJwfEanjJDnSYklW7vcDxfXKO3mxj5rloyQHruZrpc8rgrz\nS5d8wpa2KALA6JofGHjhX9+zGLbiMzoqYCRPbRzsQhRF/xGfmXxvuRNqkEJW\nEP5II8gGkikCnstX5xg8CeqrnEut9r/RfKwGPPTAQKyIqClL/nfVVAC5zMXc\nYgS9iS1wjGpXk+PS5KT1eXH73fbW1jW3MOB7Tk77fxYx7SVAH4GOnUaJlorP\nMrYVAQwvl6UCF/5aSCEf6Gjoo4RgymlugpoNgfP0kdt2i0WA7N9+4OLIkMNM\n25lcD361raq/MjlKT0G6eVFqB7ytxLOeLkLufRU0sR+jA/uAlO5+YwHCWRmX\nt6fOFq2o8O0VrHjiYuINAPAMtaVmY12ASEqqFBeZNvSg4P666QlyCT+VZPll\n+5T7bMO20ykKmY026JpaxwxHzPWldSnediQk1oaFBS1AH6XYjS07kdmJM5Ac\noOprOoQlbfTVc1ANiJh6i1AX/TAccEBes5jzIlLp3mrdLBEAmni7fSujmEUN\nHmCgQtarTl7FfNY0d0oHK8sL4hmEX0dD1CzrFs1KYEEGmjM/5bJiBE9n7QzD\nvxX/JJ1Tg2OzR4dvKJFALi9sbb2TXBySZ11AwkvVtkJLAZJpL/XZuPEqcLpm\ntqaW\r\n=IE/m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKU/HJjInLCneAYINGZIiwk5E4LUhv1aONcPVDyxLNCAIgJuXoDDgQd5uzW3RE8dSht8aouh4uD+3gqU/Xclrv2pk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-remove-global.20190802151008_1564758747172_0.8180688272178362"},"_hasShrinkwrap":false},"4.0.3-master.20190802151926":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190802151926","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bc0b1f44c3fb6a3f5eb683efd2a2c663de24e3d1","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190802151926","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fl1Uadgg+HaEfnqrkDu/rJMIHUvErKD0BovoySIedCrFQOcoiMUTOYicsTRwt6l3LjNSNSN1hVBbPtFtgEjxeg==","shasum":"fb459a2fed459627be2b3104aa15ad055c77f6cc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190802151926.tgz","fileCount":95,"unpackedSize":2016993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRFUhCRA9TVsSAnZWagAAXP4P/RwzOU7wLJ4NghUOWibS\njJ0VHPCWS6qjAgCJlMIZjzHhU8veJcaZeS1BM2CE3XJIJx53Z2Tr/Q6guwso\nEZER9yBrsjyQHDir4z05MKzdtxJls7kFgEZL8rT0G2jToftuXc/OjCeSnqps\nQBlF7tsF4kWSp6NwCd4OXv+OVFMpdGK0+XXOHDuTNWhFqraYouOBQMaZVei1\nIH7PiIPWT2iYFdisrJJEK2mcCDqXCyADR11ts+YC7BwplDuHwdiMFAlygQS4\nIJZSPXMEjL4IzoquYbiq1wkYQRMcNLoUJRYiZfIkv+R6dbQqbzlhp/qfsxFT\nFD3LtU+piV2gXpkagMFjjdyZ8FKQM/vooToR469MNxuQsolnEmF9itfzZFWr\nD2eTA2h+pQPQvbURVC5DZ2WU9Rc+fIJNYu/nVBsQ7i2OEbfZ7pz+KfOGSKkG\nx05HHzkyWYYrdd7DZngC0R0V9Gy0POw0sqtTT4LW/4BiRPvUwUOYJydW8aVu\nXvnLuBitJnwQ9XxlNcPbYNaXZP+bLbhpGo2ZkpspB+qyQoafJ4vnCLnHI7si\n9fOFqN6C6lmGKecfvgg2AvY2gLEPORQgnWar+D4Ff4PEgapOsDGWxr5RuaRZ\ncu4iCQNC/Ze/iWIo8V3NN6+KJW3yF+1tqlcNi7CsU88GtVUnEnO0XtbzHMxB\nUmGj\r\n=uvAd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHbsOxazWOWhTwrj8wRPtkl1/G+MNu7FD9Qzb/HkFVP4AiEA+84wXdM0GszVw66WuBJ7BHrcJ/YCUyBy8Pozu0NKtcg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190802151926_1564759328360_0.412909494684498"},"_hasShrinkwrap":false},"4.0.3-master.20190802152058":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190802152058","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bc0b1f44c3fb6a3f5eb683efd2a2c663de24e3d1","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190802152058","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-DKSViOPUK6hhk8klyocuQKnybXJHKYS1aExRi4Vxntm2RXWuHMLtMavRtvtVeC3eWII7sOlOCSOl5qoSAqXP2Q==","shasum":"993c8f32aaae572f755ad031fdf1d1b11dc0ff23","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190802152058.tgz","fileCount":95,"unpackedSize":2016993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRFV5CRA9TVsSAnZWagAAfQYP/3a9ITQrGJJ3LX7rM38a\nGa3KuiOIudmUkSeh+HbnUwqggdZOl/L9WX/iXDXLex736X+o4SiKbjbxwIbN\n12bQmHHWldlHffelQ6B7As8HQjoZX/c+4vYudTNu7WELxCjhB7tSJvoYqTkt\nzGxqQJc9k0ohpxLO+J3kuQlD5UDsBsqIkdQa6v48cXy6n9swYHVVrLExH30U\nO3WIPMH1Qz7o5Sj8y9VXaKKYOQiIbsLPfTakfFLAukvFbrDxIWcH4wx0QxHQ\nwUZ0VZF/PNMGjAoInIDOPlfxEzquZeQtTRs30qEOWjwg90Letl0XzDMCt27L\nF0AMkaTTmovKgw/I2MJhQ2orvcmyRaM6zodv6QygcIqEn3/DfXkuFR2Nu01Q\nFzeaKRleDd+75slvcrNnvjiU7bH1VYOQ8XQ//T+HoqUOEMzweRO+oj4us6gQ\nwLfelNqVxeo+0onYpjZm54INtlRWNk8UDHUZofTWNsmnxWjNLOMSqPkXLPea\nk1vzyzLH2lagrSkHVDM8B2ahSLzr4QuB5dopkElQ3eVUInaXIGyu57JPa6I8\nGDoWdgVqD7rGjswVcyGWIy+oIyJ8tnl1aiRAuYZXHmXZJyfHTFuuhOCNoLG3\nKVcAg1LhmSDxS87ufulXAlhuJ/n0gejg/mIBb6/BW3U4yCVbbmqT4ohcTM7A\nDdNx\r\n=j99X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSdgjbsmlqgsZC5esq3we1+J0CmiwRw/OY31jJXIsVbwIgE6k3asQ025ewHLjOCEGH0vbGmkGryKYBeskU/jLy/BI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190802152058_1564759416277_0.09791794630971418"},"_hasShrinkwrap":false},"4.0.3-master.20190802175124":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190802175124","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b4439e7681cf0054df7c2fa559b39cdee373c219","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190802175124","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tOGSVOVoZlbuBeaPQIuaQZVujQeQ8nHUNUaerRohtpW0cimai9PWxV0Cdosu07/5gcrTWvREvulwTe6ICgZFpw==","shasum":"1c54ec3a6aca8ea63f17e3ebc4d39d7a3fc6b082","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190802175124.tgz","fileCount":95,"unpackedSize":2017048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRHi9CRA9TVsSAnZWagAApgQP/20efmwXa9hwCPcWDivN\nx40Ky8D7ZAW68ExEC1o7Wy0sogW0SHNi+g0carEOL4NNoUqwwLqN6f3ZYO+9\nlWZhIVKqT0onruxRQB/E1V5OzQGUWjuykUlxxkmBl9mp3SiN6w+tyqROMAqV\nhKv2ymg+m4CJZnBTcUfrLS4GeT3qJH+q2zhqxW6sweaHEnt3H4dYNTXoKy9m\nBft/uhNwSlpzxOq0MH+8OsezpbAl5HuhIDu/ZmV204K/icTZ/X6xEErJEMs8\nz/cWkJwLBIHFTLUY+ZlFA/Iy60aG6mTqUuy/7T3PPFl5kPFSsA5YwirNcAUG\ncIDOLh97qlvWtZGJ+fwKzVefCjARiF5BxCwTTXaA0zHu4gg7O6FO2cQMRJcl\nyEpVOOuQXncSPcZ5vU8TXR9S/58TCNY5H/Jkge3Jg/AZJOx4i+ku+0EmBQsf\nJmf05dlW1teOkqRn4OoUaBnXTG14hSkgqVrzLDGtLs/0JhsFCFL8FnmQVudS\nI1l45v1P+00GtlCtpF9C88FLnHaxPtYu+kQTSVBddbOAXaEGJfvpUzpcxFgN\nKIokouQeaymkR12vf6KZ0tZIvhMUML5BjoBfG/7RgcNfA691vW0WF2YiE+CB\nzv9obe2QudS4vBuKqKBMKeWD2ZxCXnhz8JW/P58FBnSHPOuAug8wum6D3x9y\nCcx+\r\n=0HZo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjuu/WXHEAiWg4V1RnyFhxGxqQHWiKmseIp/w08dflUQIgaC3VHZAA9MyyVCDtQYw/FcNjNAJXIaMRyYdIOIb3XI8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190802175124_1564768444526_0.277786141795588"},"_hasShrinkwrap":false},"4.0.3-master.20190802175714":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190802175714","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9dd758342c1d9dba2866c911239d89c908a36511","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190802175714","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MFE2t0V5BswHTj2Wh8xRvM1E9qmIMe4rNfTywIjieXbdpUUKuSI+JNxBH1UTyUJfCKTxX7SRGYKPWRZnkw65Dg==","shasum":"c1a23723e4469bb73796242596b7d4f6c99c7ebe","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190802175714.tgz","fileCount":95,"unpackedSize":2017530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRHoSCRA9TVsSAnZWagAAlxYP/0z+VZ7QykbjzBwl8Cye\nXcNqrAQxPwrxn22nSIehXmBwI1TOPqpUGY9XE+DW9jdNH6bNkA3gnB48XsoC\nyJnQ1HvwEAeLez+iD1XWpXvFqmbVj2WNZSsgnRdG5D7a8O/UFodER9vRlSOG\n4+q2bVs/QSlBWdZPEChNE0aOW92ULo/PjQkAnnRNr+heemtAr8Yd3LIbv6ZO\nD7H1hYo21Pva45uaYWEvdfpX/QOKcxCCXoqesZei9Mva7nPxCgICEJOvECzb\nXdFkp+wqrQSAFvnGLYBuNrLi3X6/cN4Enc/He3sEDpUeCGwT5CfIe+kt2k9D\nCqV2Pdi3lsxEgpEVkNl1w5HBFoipn19HT2sYmFdopSZU988xXGu4pjsmI3uj\n+9PD4+ylIbzlInn51vOeuxIz/+HlOeYkvi5F+HRR/L+ggTb2XCY/Hc2jfhAW\nmpXp4XqyuLmS5M+4XPr4lxpa9gpSXls6o/igl5TWU1HgWcVLnaDq+PNIG6a4\nCH10VOk+vZ9A2hbGt0OY8ZCY3j4OJ7UiEt/bIqlBet21zReY/omYWsWHIrIa\neK0lkrvpDWkfj9rGMbMfiKUz7McNCzlFWwOGqQBv/+m3yXzHzERjHC6bB37o\nnpGeqKExBnRfLuG/G5NwR+xWpHH5Bu2KRm1NAfd6GNbc7IvalIAxxEKVy8jH\nVUBv\r\n=ZeA0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmJ5tw9dj17vVNWBhyhwv60JGDsrYKY33Ce2UUZDHSYQIhANC5m+alrfORa6SVe8dzSYgqGx5NCOyNWJOcr0fFwGKL"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190802175714_1564768786296_0.627879924369436"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190802212149":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190802212149","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6a71620e766b7653c0f2303e9a1d4ed135f6ce3c","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190802212149","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7iYn/dj0XWe/KEUGl+iv52ghqjidQWDBjrjFpozSmp1bHcmPd6YtaS0vxN7uh3+8oxZl92y6Lgr1i+B0/A/66A==","shasum":"095fb4ef7b501b6bcac8d227873ffbada4739162","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190802212149.tgz","fileCount":95,"unpackedSize":2022298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRKn5CRA9TVsSAnZWagAALecP/2WIkoQSamQ8W9V9Xub6\nqIo1K33zI7V2di1l3TwoeD+h5+jO2ebw6GBxVfE4hlyDZHQtC0oIuhVS1lcF\nfDunhR6bHQP41OZ9a/9eI14Q4QjB1RnGxV9s4LIww9Es4x/leoxAFIzTXYpE\n52PwxVeXGVU2PuNPZTphHdvWcCpT1yOP6CvVgDw1QtTGI6tho8HE+TITUQDM\nGkLnmje4HK1JMg6YoP3HJEeQs+s7e8qbvRimS6gNjhrD3NF/tfUzktut4s80\n8BOcexyGY6SWrxmIAdgwGXWv1BNj3M9idpHYT67JuZfuCSpjBG2EYCl+wkO8\nFLKZre1rN5YW4BMbcfM0U1U6pqPC3/Ky9YwIrvHJ0Tfh1JWW0x+yg8Pv10cI\nnSe07twqASb4uVSk/wHmAHoSJux3tP/v8qNnreNnx0nLB4cJ0Rb4MyTEi27V\n73cs6BjLwiDL6rgBS2bhCWv2JnIR3GfMGTU5i9zYd7oUxUjBNQB4Utcplm3e\nB421OgQjrhhSFk2+iTpFUZl4HHs8S90x/YJLMluaLuoj2pCf6kQdyTDtDG/K\nD+H172UNA+oiAqcbvZfFYgcVsu41eDIEmGnmd9a3Jm+U91oaKDwAZAaRedrt\n1nOWWQO+ouJiNzvNN3/I3HlpZXNWV2cWROfhxT1pSCQ3ASe3uEK9HezRZY5X\nRW5W\r\n=0Q9Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpbW+ppFKtGlYlLhdcGUzSN+viUf1Z8iMjr/g0H59N9QIhAKij88hki22LTzmdqdoC1FtPXHB8m42eRMcCkARnF5CP"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190802212149_1564781048333_0.11413306072201945"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190802213945":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190802213945","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e798b6d526559c3051bddd3e14954be7532f5f21","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190802213945","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QDDR9VFNl6mMB7axceJCXy092j2670UdJWzs3NLTvUn+NNHMSTGAXWML3Am5F1MQNYz2iQuMeadlFD8TY9dlzg==","shasum":"870e5587c8ad41a2067bc377e1700ae5a9b76d79","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190802213945.tgz","fileCount":95,"unpackedSize":2021769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRK4jCRA9TVsSAnZWagAA/FMP/19/pIeC/45tTIgZPgW0\nODIAX0n+FRhzD373P++yDqlD9W9Ty+7ToHUtXzc9HfTXDepQ+n/mQwqS9LIX\nneWdssUYyv/wyFpzmIUK2TwW4LAbnqpDGrpetpPvgVQci9Jq4Yt9zl4mY/hB\nNvuAO4W8dNBomH6uq21edvSKsQL+XzMHbwaH3zUfHBkw/uPGNfF7H9gF8qVP\noy7yRa+DCxhjzV/Qrxb15hI3VnOycKG3/gbt/1PqwQoJUV+aaD8D4kYd8Fm2\nfat3PKNJT3TXNyS42UT+yEEYRLkuC7eTkKVMP7zlfotHzoaxhNu/LEME/A9L\njN/poNPRgVyGiOl57RErtVeRex7Dz33iaVa4e8DUDaqHeaeYhMgCOx02Zto3\nAFvSG2S3yT7aVi55z1QpRmBnV6/GwDVoyrzuockKJxkw9yIZs7QQ1Z/e+K3i\nMPIVdanAEuVPHrRIuM7n0cje9DTgCaRwR7XJASEANVUvmCehx2TndX8afapJ\n79YKTNlSxh6yWPp/uQppqErQOEF4P95u0LZyOIcG4sQPFL5ClL2D0V/hvScM\n9/Rf+V+4KKBXlMueZzDwQwTrqWy1hzwC7yU46/HCxO5I83MdME+BNikSBPVl\n1SQoalaSZTofCCyFISUvGIV9DFQKpO99XNNZ1dBup0bOMj3Ai9hvnpQwUXCW\n2DIp\r\n=Jend\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDM1zVuYAPBvmveLLbPO/12JX7vO6mZK+RLjbF4vKIiOgIgOujdX+Ho+7ny1Hy/mzEaE3WEMDFDCYjlPIKyDq5bvT4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190802213945_1564782112562_0.8403357218269816"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190802214756":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190802214756","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f8d165679fa335dd08d06af8640a311f1c064fed","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190802214756","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-C8ZLgnxJBelqm4d5BwSh4JO6RHoDhAs/6MHpCe2aBGGDpdDFk4sDcL3eu22Zdje+MVGIMZwLP/D4pPQXPO71gA==","shasum":"e27f67e389b2d70ac4c7db87f3ffebfea5c15486","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190802214756.tgz","fileCount":95,"unpackedSize":2021769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRLAWCRA9TVsSAnZWagAAPfIP/A+DnXXslETb1wLWXEKO\n8WVGVaRkYrbV0a+LcagGDnp3LP962QU8nl9NsCTz7R5rVrgXt5O5pfafqzsv\nYNUUT0/j9bnWi+dRIuWB3fuPUztLcFP4sWeAqUSabUXPhZpv7mBbHsbCmi/9\n/0jmF2V4deknRpbjY//yFzx+Rn6AqbvQzGpqN6pP3HAIFd4fWWi52IVWV27z\nuCBZkmOZWWtTqcUFFNQnaPBQ2BCiIrlr8y0JPI6CZYfYRS31QvLUVWqn4sP2\nhtWuodNKt6hsg2FVGcrjA1P3YKAMT8mORG4nEkIOfn0TP0lZ6DE7zDwueQZ7\nra7SUnst3MlD0zeetgRsAI2/46RXIhaYLCteXITuhBWRH5dJdV98gw32bL8r\nXAv63esrjdrxbShlRdzyZlzImjoMRPeGHCIIKqT3qYJImuyCGHxzXXgkGFPd\nBxeaNWiLdre1Em5IgKrsKhEXkQOoY2y9KtHs68SC9TTxTAncLYmGnJIohAiF\nK1+wnDqbIC6bFNuwHkqlwXvf5umjv2b4O/Ejp2g+upc1azZF8Bmg5JyJ9ugX\nnF4pnHKy4LzQ6tYACH03SIMIwrymEMuYDZrrNFiFfORk2JGiEAFcWq/t/VJS\nSy6JQg/6QsQVlIfVsJ5RtqY/xH/5OTaoPCvncvlusdFFmYuatMNVW3HTDLbf\nTRz6\r\n=2QNY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2TJIfUgXJ5mSpeeVaIcXPKnY+mO1ggwdIA/GaI46z0AiBx6eQE14srllbVPkETLvbjlnvBJnpNAXyhNBYrSoQAqg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190802214756_1564782613965_0.8104705354201223"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190802215553":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190802215553","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0cf13e4bd4bc73655ee30a0ccc2008930f5e1bae","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190802215553","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FxkO2swCf78K7n8n7dmnmUdOJzp1hrb99VnYXO40bNzu+FPbnOFGzWTRyg3GlBV32FVfo7cqkQLr+DCrXYNwug==","shasum":"6c5643e5e10b31316eea6f1189653ac8c87c1789","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190802215553.tgz","fileCount":95,"unpackedSize":2021782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRLH4CRA9TVsSAnZWagAAa80P/iFMOLoeGObja/uqJ4fG\n6S02kBt5m2ljUfiYlx4akrSHl8VX48i/zv06YO8INwXGybYh0RXKAFoS19pb\n/EGqrcodR7HKSHDMKVw8brocn+l1O148XquKQxa5OJVI68QFaKerRY2IvNUr\n2NVkR9kt6awCJ8MqpMNWpireoZ439yeNLQ3zBfVO/b/w13/nxMXoPM001ibZ\nHpfvuKr5p6zQrqMjHkqc4rguLkkbi8sWxkCoVZdzlhr7RhbOXoelz3q88u7R\nCEElxyE6J8A1TZL5Pe6FU9Z4tX4NCh4YhQNlDtDsXndGjWUQqYs7z3hVuss+\npGhwDlLMLiJPNittFOUDjcm8xNhuAwqBi8cYwTyLn5c1B/jWcy3kC8EzCRib\nLr+SYSnT3jFV6AnyUzE70gJai0Ho4eQg2H6gEt5lkmc+1i20rWXe/8u29j8N\nFjkzsyun671YYRC0NCaiw+dHchjnnA4MS+KjvuGuYvTJK0abFBtoNl/SGtVH\ntOw1YWsA2Fwg1KxrIorEbGTdqp5cIbfV2cuEOU5h+B7q9ySah/gQ1FXufbRs\nrqhOmcKu89LZLaA6CLTx9bSUvou56Is9Oxx2wVFOupTVlnNE3npA5rtW4MYl\nnImYD6VZ1YMHZ77VX6oByGCVbvI3Dta/6ECbKRx7I+y6XdeW3nHFz2H+oySZ\nBTQi\r\n=dd/p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBddH267LDSRdKzrVYOQ91ZUMuGcd4w84sZwfjX48pp9AiBvVvm0AJdcoEJz5Y4qVUtF7wftjwQv47RMOtrXbX5mkA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190802215553_1564783096091_0.8502110045719586"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190803085459":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190803085459","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"50038f44b1627bca99d4e9ce12a924746daf44d9","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190803085459","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hbgAHh1hc+ZXvaeezDPRP8lEd3f3ca2iofQrISRpkE/A9rfVBfM/qIu09oh35kJoLefNFJrGC8mfRvxtTIz+pQ==","shasum":"4aedf5ffa86ab571d2314c6ff614d200a3eb6205","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190803085459.tgz","fileCount":95,"unpackedSize":2021819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRUx4CRA9TVsSAnZWagAA5pIQAJ1kA+tq/R23I5tNzkN/\nzGO16CqiQTa0uMCvXTOJVDNducfd2WZ4GjHH1GOk3wmqAlhReW8J0WspI6yd\ndUVZU1EE3p4ofDm4ymyYP5mINw58qNPlsqHv07i+7/VF8u3MK5RRegJHHoCB\nlEdPM0n0rAnr3YTZcEI5MNui259T8mM0moREQ5UH+YOFkaBaQF/chIvftLWJ\nGQNeerQyJRgpi9ZWB4PgQdersWyZwJtYHRfyBfI0ShpfPNzJcD6yJRPqEjgd\n1TSOt7OBunTU13tTbm5rebYFDmNosVL4VBJnl3N1zN+KRFRJ2FMd/zo0AKYK\nLc1J8sPnRrW+aQdnGbjYbUWLFm/tJ9FG97Gn+mN5yucEvK9qlChTAFlW/o6P\nMJQUoBEchuEBvPSoFnusueY7sr8ZhfoxJ3cJtaZggZZ00oXVCyybr3N+wGjK\ngMiUesxYMTB6Qn+8J2P+9gL4i9iV/MAsg/c/eA6ZyHRdGDUWzqCSm9mhIVdB\nvWRTcX1fWsmT8XqndNBZ+bvbzizPbphOzkkN75rQnaX0GMbkfzj/OYzkz1nT\nerbwLZjCqkEb9nVgzC1ZjwwCfHCwg/ETaVhnEUtaeT+IqIiVGuUjFWjkuCGd\n3XKM9XpP/MW1T5P5cNgz0X9erLxAZh0Uz8tzJji++ZxFY8hCtTkW0KU+id9M\nt+VT\r\n=AxZr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx0wCPFMX7KFi7p5AHuUzwHqwKBVpc0IJDTh6fIRNwAwIgBLmi7QaCA6FhVyfRfdaprcdbcGgXzqKnr34n+cWUpME="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190803085459_1564822648155_0.8930103057875889"},"_hasShrinkwrap":false},"4.0.3-multi.20190808041710":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-multi.20190808041710","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a1c0911a39d87587589862f35d70addde36ea693","_id":"@atomist/sdm-pack-fingerprints@4.0.3-multi.20190808041710","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Re1GLKjkkUf2CLD8+UgrstYb6S6PdlE4cQ/lShjhAAy5zWVEDLR8HJpXO84lJRWwPGm/6PZoG7Kd9QQzxNg1hw==","shasum":"21d31f93edbfc861b651558432ba03085edd57bd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-multi.20190808041710.tgz","fileCount":110,"unpackedSize":2041232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS6MKCRA9TVsSAnZWagAACyYP/1lrt6XT84jhWW3W5lQD\nWsSrz9YP1rPzgIKxEgNawISxBucXSnwOK2KakvrpqgRWPLObQ1XQoatfusWe\nQlPQ76zNwI5qOJXmlZ6Uz9TppYcbaLcYUelON7NZ/3WClEHZoKZaPUDtSh1k\nZS1JcMIAPObTQxqkXki2aWE5GnR4/XyDDgxFOF5Y1UTYR/By8OdQgVIws3oa\nPAqLpDYrdJFPRtfryy9kMsIs9Uudp+tN7ivydMEoOvtjzTwEqhPzOAyPi+uG\nw2FYB04SzkZKd7uK2gLuDqHFYDZgIHxBiiHJNTGjt6OSxXWt1Uq2F6LfFHd/\nCfDbEcaxv51RSRTtTuOrYJU8abligjT2a0bbmhOcxGiHxHPkVYDQSVvlspBE\nk0UssZwp98GtfAB1bb2C8Kfq6bGGiBXfhVuIdywizTj8CbwoK5+1is20MQXJ\n9/306Y+5m/Qm2X3nMOaV+rTkyq38pLgvD/fwBUmfij6Q/sVbeTCR7CAGoZK3\nMt7Fs/JEGK92TO/2/sYuAVk4Cb9GqisxyJpamNLHRpjhr2e5EmnaTv6kpBgz\nZvZpAzGhBvuLFo4GOjj108q5d9Pto/5AC6lQOHxZ7HcLwffGqObKH3qFOJNA\n9JfEBGCrt0yQWdUx7frqGvvHA1tf11rId6bZ2slwxUYgsVLqRvul17QWP4lG\ntR4Y\r\n=C9Qe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmQlsqyYhwnlEQnvqE35190li9XkfITbVKAZ6Zsew4JAIgPbKTX9Enz9yNGgvJsgVcllQprl/3y4A6ySY1tR5L8fY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-multi.20190808041710_1565238025214_0.19861889386998022"},"_hasShrinkwrap":false},"4.0.3-multi.20190808053809":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-multi.20190808053809","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dba45bbf047f0734e2a39b1f810ec97eb5ab728e","_id":"@atomist/sdm-pack-fingerprints@4.0.3-multi.20190808053809","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nS6wmtKYTB9qoHh8kICL8Kc9bcu4ANmOWvIjI+TIvUA7KVI/i2YKwo+ZuXswdf/mxcjof6UfYHNeGYVTQLvPKA==","shasum":"2dee7740ad2bf69ef165a8f8db7ab216cdefdb14","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-multi.20190808053809.tgz","fileCount":110,"unpackedSize":2042338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS7YgCRA9TVsSAnZWagAA8m4P/1VN8x/Bu/CpOZhYqyLm\nnicGmE3ph7iJ6kCpas5TFYAn6dcY4SIzfeJbO1id0/3bJxcYGYtrNGcbtSiP\nfVJm23nm+Msm85PfTQJyuquwBH0f8eBNl9+NCt0peC+A+nppQL4zzgj9tfvm\nQu2gRm43LNdZMDHGrPR8y0JDn76vlEw/JsvD0MwudwM9cfg+ndHwEEh/9SeR\nAebHWOX6ZStoLJd02IK8Q6o+0MikT9uLO3HU8aQy3uYDVxufdQ5sOkyPhqYO\nkzVZdMUlRFJydE2V3MAZECPHxZGcBJiHd5UH7y2QoCFawOl4mbL5oAvTQz9D\nsG9rR83K0+SdwkqL2iZirKhaTG+IvyAdHKsq6CHD9tK3JDl49hiPCTmQ2a1B\nJTRytkUoyUew95/yFEVnU5QMHIqoNXPJWd+qMWSz7tCcCqEGyeDZdlO94PF+\nD9FqNL+ay6v3BI97dCetPvMIJW0Q87hysG1qXXqGJlobs5MUjnSx7QDM51xT\nAZrOhpoGCEt7Idf4IU5FeIZ33aG+2rFOe2JhmwFW+b5sh8V/MjvDS1nBVxM7\nzzvp0FpsMTSQir32FccOVf/jzkHUzjhddbOp6gPMtm/GG8J+vlQ7EvHX8LRq\nS4h5Ps6LvV8xDqkITyH3wMcGTLCWQbS9ViVbv/n3v5TRm87fJ3SnIqePaUb5\nCn3I\r\n=Jyu6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSz8ohC9tq+vw4b4qWdGio8dy47hDuzMMTNeGITKSAUgIhAMbl/JAX9Nj+ksVrMl0o93WrIIibXRax5PKTLKt7TYRP"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-multi.20190808053809_1565242911907_0.9101575416547671"},"_hasShrinkwrap":false},"4.0.3-multi.20190808070529":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-multi.20190808070529","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1ec8925a3dd6ac4de45c86e17a63a19ebdb94e0d","_id":"@atomist/sdm-pack-fingerprints@4.0.3-multi.20190808070529","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LY+/5HbINAKKTOgIuZSlz7d3mqU/yF0wxw28ioxq0rgUL6jkOBMw37f0vYkkQTU9dFm20+ml3x2dL5fWmg2Pvg==","shasum":"9e454fae62efce6d96bd067a39dc3f33474fd44b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-multi.20190808070529.tgz","fileCount":110,"unpackedSize":2043449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS8qcCRA9TVsSAnZWagAAf54QAIVFZNlocflhok9roI2W\nAHDB1cJ5HMxapg4HvoPaat3i9Dha5P1bNJqF5ZOD1fEQwLwBun7YCCMbwnqo\nwCyPpl3qe5Uy+oVAHLx4MqP+DNzSlKJ/CAUajkMySpiIT3tIHTdtUANLDWKt\n+WE5a74eTXC5P8S5Ofj07l16twQeM0T5adF3LIuLXp0qHjKxpkwbrlS/H4Ux\nQ2rXmajWkAbUEGMHRnjIrn5dZWPEZuEB+DgZ/bACNOGpszsJ+JTLt4QBIB3v\nCoR+RjrCUuo+nANI8WPDS4Ck+wuHsLXj1KiGnn8OUZ3coCLb+tq5jb1SW8Jp\nf8wbCtFnF1tjcipPp+42tBPAlH5ALav4I8iKdjBAZywxOaKfJAUtDpsX+mj5\nTBIXPRvlKYJOPDR6u5AI36tXeCGiI7eLdgVxZO6EswrQNERiCAXjgL3JTCAB\nP7v+SNdI1MDhuIe/44BPx45BIgOEgr+yFcBK77bu5gYqurzwacWSyBGarmek\nf4uOD13ThJA9t9MocIQ9FJPsKYEzlZUUFkuWir0CmW59e92SLxoz9L/yu/4n\nwWlwQngtBIUeaqxiANcXokDsbxbQEpcxjxmaB/UisoaJ6WJLs9xLpyXHkjwm\nFrj9CwfV+UNS8+1MDJI9ka5NQimVdeTn+H3Me3J2fCwOA3YYgEaQBjl1hoKJ\nO8tB\r\n=75bu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID4rsGqQHjfdzpejU1cNJK7UqH13snn3b2Q+iNTbu948AiEA5nKmfDl90nMyCuHtUrnjIS96F19eDsV5PDdWGTLUqX8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-multi.20190808070529_1565248155917_0.6781455271986301"},"_hasShrinkwrap":false},"4.0.3-multi.20190808080339":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-multi.20190808080339","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a0352ee6e26c8566b35e6881f42b677202cc15cc","_id":"@atomist/sdm-pack-fingerprints@4.0.3-multi.20190808080339","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-t/98SEXQfaCmemfooVUjaLiTyTLT10g3vOSTqX4CGE6O2oFPdLWWeRY2gPUrY0aqH9T8hcocwphgzX6D5j+PXA==","shasum":"241c8b72f9dc0ad6579907690f594b4185b6eaaa","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-multi.20190808080339.tgz","fileCount":110,"unpackedSize":2044090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS9fzCRA9TVsSAnZWagAAHL0P/jl5cLfjDtW1MZz/5MNX\n37mGSlFJtyLX2dpzbkaf3+Zf+69d1g8pOX7l28vMOeq2KQxzlAbCr96TOMaG\nJYwrtZ8w0uKcexbtKpkXLb2cUh5w6IczHv+WtBFMbNlRdiiDtveCSinDMSUl\ndj5nhre2xsngByUE6suqqioNlhYErh8tceyHUk6snGy4PlR9TBeHVR9di9BD\nwril/0xTN2qeDNPmUSdgoBGbtTgF3Es6MxwQ1fiISJdANJbFZZsSe/G3IYam\nWH0n0U+QbDuQM8d6x3jclmNNV3IhTht2tAV6HNbiCnIGVlwA7KR+GyU6EZGD\nNnqNJAFxz26ur4Fr2dV6WcVO/J1LmZU/ClGc3EH0Vv8WXLFkwhuSe6iZ+h+H\nEcvj0iAK/+daP5M9OEOo6fHpyvxXumcoqP/83m85oq+HZ4fbDftouvYtpV8y\n4KukRt6cCFFTVIEilGcRKqlz2zgpbE6m/y7G/Mae6qDTKwLdLymxJ5wg7byh\ndOWsE9zddVSkPIGo7WaYesNmowzxnv2xFWcxsSfbl1Yq3fj1wL+yn8XWcYMJ\n2yvYjDkDWl2nvrfCkWjprUymgA9W6aKbBddeFeSX+e+pbd6MLJUUi7uX5b+j\noJ5GgBvxEcmS7LJqH5rK52Sq8EFxgVrbKVF7ZvXe31wyGZr5LeNuhW3sPNLc\nry5p\r\n=VFN6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE30E30b01Djwg8zFS6iR7S3gLvd9iwy70dOL6hzx6tAAiEAoWiOmUxMv3Au7d08KJHTeAzHsR71C5XQuBy1KpgpXqE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-multi.20190808080339_1565251571281_0.9832994081166497"},"_hasShrinkwrap":false},"4.0.3-multi.20190808095000":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-multi.20190808095000","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"aebbae43979a17de319cd74f735e6f3db55e50bf","_id":"@atomist/sdm-pack-fingerprints@4.0.3-multi.20190808095000","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-A6QQmt2n0OcOo56wWKoJFOEnLzwdgz0SiLDgYFW/vJRXYFkCbnfd5vsLJAFe5FkbXyNZ/eL99FPGPMv9XdkjWQ==","shasum":"2027ff620fb848c429a88516f90e39e24b97fad6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-multi.20190808095000.tgz","fileCount":113,"unpackedSize":2047337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS/EjCRA9TVsSAnZWagAAYiIP/j4fkANTKdg2taFfDybA\nlWmqWyeMSDIaL+SCBzqq3NWslDm7sKt1qW2bcmkPB6Lhm1ShQfERdhC52TXG\n0n/HzApXnKgkiYcVzhJrjcBK0a6fvFbNuhizRVK1bxrSwtpVaJIiYgQNoVpe\nLXJBuF1/WvXEMuEXBIwnlW+4J74ydSoHJjVs0gcrp8tVyNrXmfxIcydozZta\nTSUcAZD6lB670CziazTJxm7OXzCSrc7nJg63QUrqEWB/3+JDkDBXSWozp5Jh\nBE4oRMbAjW/zSw9j+4MjnJ8YxQbmS1OskohTyNG3YwOQGJgF40cv1Z/yok4H\nszr1I/L/a1AKoksKDcOQN/e3HiFBX5Fa94phPex3lCH0jAiwT1ZucflS9X2L\nXhaYORhNpRxwslblRcZuesiBcaqxPu4sAVLJ4/KBze/QX4sgC24JU8d7Fy5Q\n58b3BI/yq6VwB0u0h1zA1A3aBnKC6yCmgUFfrHmIGnmA/ljZ/bm4B6GU4RAC\nPA3S0hcU6EjVtG2rLDD3y8IvPIThfcFEQZPCA+TUQUkC4XRqgxyWacOzztpj\n4MoN+yjqDOWtD5Zajk4SruQCLp4HQ0KblwGu+lcodr29B4lntcwqxKBSX1dz\n/WFOSGxvBgUuJYcs4PB4Rg6vq0Mkvomh2OXf9yKPj4u5F2FcWc0BYZTEI+O3\nVyGZ\r\n=ao7j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJsZ2IPCRTFuoi+6GwcVdBGn9TwdOXFIWYQmbfQEa+GAIgUxr1C5DKqL7cjm/p28uGQ1ox3po0Y/2rQ3OgaZTJ3kI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-multi.20190808095000_1565258019284_0.9800009368389904"},"_hasShrinkwrap":false},"4.0.3-master.20190809062146":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190809062146","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b5b8ea4f8dd22e6be339d3aabdd6ac3de2e2fe1e","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190809062146","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-jnXC2nI9hiRo80KlCJF+CWgrjo6r3ruItZxUj+8dMAIl8J/ezWSVw1Z/h5JMJN0VOBviW+OgDqvpoWMNaVyuAg==","shasum":"dcef37079b5c7af3e8cc5ab56afa31c161d5b92f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190809062146.tgz","fileCount":113,"unpackedSize":2047422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTRGmCRA9TVsSAnZWagAACsAP+QBJ8CHIm7MQ7Yw8ZvFt\nXJyDXaJMlFtTcKQ0r36opPeUXCAN+Hc2azFLVfrMSPXHksA9j+Dg1e2dnclh\nScGzMJIKNJ1Blqyl5Fb7tQs7jT2SLSTgQaBGp97ypF+/jeA9xFaYsiKZKzBp\nqTam6FoVTl5hCRKcfTSRMu5xWBDup2mtOfb6CA+UvsMGxZ6SF2topk3MQ+JZ\nZoVhpHRzr0lOIqQ4ix44UFGFecAA8ehP9QCWwr/xkoNy2u81zM54Yf2S7cQz\nq1m5nm08MJDNfe/hcaVDQUM5h8ZksZuuzWLznXs/dQk1KiyY9nGa3N4RCxVK\nhDgUC+zs7YdWuq4MMbQwN1CFuj/VNcMKgL0Fz2jZowYsP4+r+B8MA5oRM+od\nSkZupE3/B5XQoEnMyXlxYYOHXwD5Az+7QeoSpbPO0NLuUPZ35U4ey/p9FzrU\nUfJ+Qf5NIsSbRaaBGwTRgHzoDOrK/VTcmA+axLZV1lU+0RCgLGjZbgBiRq8B\nWlrf0tyelxfY52LDsHx8mTScksIOOY6j9Dg8PhWSl/qFqzrGRz1/DeOdvLRF\nthFdBg+fmcNvj2928YHxbDlQE6cr2C03bEFdUQcdsD5LZvz0DWyIJikgymGj\nsjJWrxY/yjBVqYEO/k9b98oAMfU/CJTQXPWaEKPW6FuJ4nw+vntzETQBmrME\nuFqk\r\n=j3fW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDQ2wvB2/7icNBGVlEd8eTBI3pu7O9J8GGQ4D2HeCMhiAiB3Jv34zcnT6l30w1vQnR+lfVAfUK00pUu/f/AZMqcr/w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190809062146_1565331877738_0.9256168483287537"},"_hasShrinkwrap":false},"4.0.3-master.20190809062336":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190809062336","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b5b8ea4f8dd22e6be339d3aabdd6ac3de2e2fe1e","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190809062336","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UhrKydH63fmNiJ3n62z/+4WYzGmcxfMkViR8R2bgUovNv3WIUUkNCVvxCsX3RACvqyRvoM7OsCz7zQULBgCblw==","shasum":"bc92f1e76ac6b8c81dd3060fb8454bfbd63d5283","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190809062336.tgz","fileCount":113,"unpackedSize":2047422,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTRI+CRA9TVsSAnZWagAAo1EP/RXQ0y0WMebekEfkKP4u\nDwk3EsNG+JJNrQ8jd75zs1UgGy/WpA3qXpOuklq4rYqDaz3gfdqwzwOIcV0a\nxAjQVUS3tkn2bczOFYBcAH0Bmt7lVTwjgI9K543Nq6Qu9XODirhGvJ6+uKIf\nYROXEjWtuLlSsELcW6r7Zhb8p9BBdyV9Qts0MfqbHG+899CY3BpiwMpiaSAE\nDme4Curlgd/EcP/XxWCE+zEQH7z8KX964azJ7sMjcLOV65+hpG6HfFGOGZHJ\n/valLu/kChgIsLVt5NgPy5MG0FEZ3q4FQf/qKkNNbP0LJWHYJ2sBe4ll/ffc\n4/e8nOicdTxxUVKY2I21rXP3SFtfa+u4nfl8kTqqq1v6z8PsAVNcARrXXK5F\ndfqQM/bobFZZz4byhCRSFztRU/cnQnjI8d3MAciwworbsN7tigiHXifg6WI3\nsQVDE8AyJ8uUt3xOt+I1C1yGbAH/f9uIbFHF2o6UwlE4o7VGnY7LAkcanFgj\nt4X8rVdCacGbtAbJfvD2S80ldyEFjqiGbnCbNY7pb12+INgf7H5BKhWEzHnZ\nQObGc6UgEQAOraxJWtuudXYEchii/b3GavXFb0anG3UbWXYTqiMyE9R2iR46\nt788OXi+ajqz00TgnYnf0Ts6+aLU/lRjWLwmdpxXa9qZIHmEK3+TCsN/22fY\nbFNl\r\n=z4FJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgIOaMX0EdDv7CUXc5E1RYzsCtsUiFkCeW786n5Cx+NwIhAKIHqd8/fvRIiOtu5MKiM6CTlsrx5Zdf8q+O5K+48r7C"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190809062336_1565332030241_0.13939972279473234"},"_hasShrinkwrap":false},"4.0.3-to-policy.20190809105436":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-to-policy.20190809105436","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bbaf30b5efe7a2f06f57b0af911e1ba9422ef652","_id":"@atomist/sdm-pack-fingerprints@4.0.3-to-policy.20190809105436","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-n3UaMJbDCGn9Lgay+50Ooa565BU/7DmDlYsy2JQNhTbGVTxmXVyjJsJ2DufI+vhLDAq2NinDjV3C3ivB+BN7hQ==","shasum":"5c5de8483f435ad91bf1aa3da9b2b0f36ba1a4a2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-to-policy.20190809105436.tgz","fileCount":113,"unpackedSize":2051808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTVGiCRA9TVsSAnZWagAADyMP/05mfhYXcZq4IaG7u9GI\nWG3kVGw8tioEZhnwS/wH1cEw848/q0lzy6PQXdUs02wp1dyO9JG6fdDqAfQw\nPgDJ6Qm3WnpToyiuIckaMzqQ48PKQP2PgbIhdwpQEKJKnsXE6FxJAZqrecab\nbisteFKD3Pzi9B51ic6JlvZxsF4f9LzaSdo0CVN5mjCPGSfkRvRTZCBDPXJW\nwTUX/jwwDmLcKMd33WaywCiGwgr6p+MJ80Yk9yQ2gj5rk58RJlijxAb75ibP\nKfI+kN3HSE1qftbhVMm8dm/9E1rb2UUawNQVZdXljzgTdp2rRlwTtKnq0InJ\niNhyWtVwO5L7XnVWLFzgaRPk/jyui49+bZfrulXdKqfpS/igFbkMAWPVdouZ\n23zeeEm00uId+ChlQ14cFV2npo1QAwxaS/o3Ly4MBcDB1Hc66Bw2MVGx4c1a\n2m8SISidlWsrTg7q0TATtP8LRKRCIkLPc+sZEy/0XF9Pf3EPssW53uy0kEsI\n7+rxun8o/cBgttLtuuzuX/Jqv6uVY4HTnNJWQVcvELFf/sumRiEa9sw4mpsv\n7Mgo3Y4rDwnYHJ8AQP7dmBZ1xW+Ys+swQfUCvWOxUkpg7fHN4+t52I4uhEdU\n6Bji8WAmp7kfIdjvUg7p6JJsGhk948LTbMU9NVzA4mPiIN9ADx1MkOUt2p8K\n41Nh\r\n=ZwvT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEp6DSiq1OLLLAkLmr2V4irUla4nJSmWRqOdGH9kAmCAiB9Xq227U1rmkPdfjsl0Hs1iw7RRsOOP6nnb6dcNkrADA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-to-policy.20190809105436_1565348257661_0.11128857761214594"},"_hasShrinkwrap":false},"4.0.3-master.20190809110430":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-master.20190809110430","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7c6462115d3fea4aa512f87e9c82ee389b692bc5","_id":"@atomist/sdm-pack-fingerprints@4.0.3-master.20190809110430","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/KLAgzQsA5cT9HFi227CsW5wiW+TgUZZoNzohJB5zSgT2QeUKzkZlVec/FAk7uFDbGoJSsUIdCXuO+yq47l8mg==","shasum":"cf45e0ebd1aa8dd0ac04608fc19fffcd408f983f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-master.20190809110430.tgz","fileCount":113,"unpackedSize":2051805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTVPrCRA9TVsSAnZWagAAeucP/RyuHbjANK+Ag0HUoqBi\nucoWOwrHQ5bzPPQHxs+4MnyNTY9hoT+nmJEyzwuGBsgUdzvu7x1CuMb/esRM\nwugzyQjnIPJZJYNSBbGF8ZwXhR8xC5qu2vrlkMZhViHbHJg/T75E+CVd5ZLL\nrT8jlTOcxlydFkeFy8FxO1M1g5NRABwblAHQ7lK7OJCa4iDECAz+lX+vyvUs\nMUQfgShk/YVJOEyotMxuT6QPGpBQXpqdSlLrUltZd7pJxa5zTCHpf5tb1MrY\nwWnUCzOLn8Z+Tzrk0oR2CN9cfIKGOsAES24H4MSfEfWywAXm6mi7/iCwW01F\nDTXKQ7KMZg2/jwEUYu1ovRnE1Ilqg1xGEETlqvJbkvTqCFojGz36UuJgEwXz\n36B9aJVuYpH+Q2fki/FJm6ElWo9cVMltPYsMSaKfIUa/lIOU1eZui7nAxeP4\nov5GuG/RP8r1FRpjVMj+uV0UHaZwxhN3qPPujzp0vQQIEYeT8ojySDZnIOdb\nLUaibZncxgVIc9eyUNy55HPeXuNFn3HTmFBRVQjAAY8ZWb8HJYyVtC2P+2v9\nMHxNwk4iD3wYaCzdR5sRkj6umoHOjq86qsDi1eLxq9CtpEenjTuqxYMxopsW\nqBxCEOaikgxfKjhrelwIDdV0VujERHWHB3jNkg23CV63RpZArxAtn6x8DZb5\nwiBG\r\n=PemQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDasn+XMTq6jqSjnSTjmwwnz5YOTvAOON00mdxdFFGqsgIhAMsHroqc3purD9wqv8qQQYVOLgh4qNfohrPCsqxSUwe1"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-master.20190809110430_1565348842307_0.9403930277443842"},"_hasShrinkwrap":false},"4.0.3":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"26d397dd62c489356e5767ea6c7e89c54243c27d","_id":"@atomist/sdm-pack-fingerprints@4.0.3","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2vjBPPc/PGKsvkMLO8ZJouanCDvp7LTkzbBS7nQ90fdoVvfSqtfVvknH0u+REu5ZPTk77VxEwsH/E5ogAvkAig==","shasum":"03105cb692768527599ea5abeb687db8e604341f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3.tgz","fileCount":113,"unpackedSize":2051783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTVbgCRA9TVsSAnZWagAALtMP/jmbvLh6t/dfiYbCRc7Q\njcu7rOyc3iUUbcMQRYemuOayYp58tPXSDMb2bMud20rikICc5TxLY5m3P7WH\nVlx2E2vkQ9coUXuVG5MaTDuIhvb5aGpoO3JNMU729s/BC06XOGDzGqfTjqhf\nsj9dgzbVkTLoF22Uvz9I/hJTLO7sZ0BFpk9p+bCk8oFKa5atP5xIPS3omyOQ\nALtrzMRZ1QG2tHggtbQhZyFT5lf5hxHQoOydWKRsyaopdTQWTHdX7Iz/ZCMx\nbCaz+/+4YtXU8EoJ3t+AIyZWLjpgXDbcFdLjK44f5LkZzB1dQ98RHe2BeOTk\n7ecNB/mtxj0CqmZ46xxr+OJ7FB1FVz/xjhRUtJ8+C3pKhVrCo41nQp93CjDN\nYtKpVDQgl1E6Svf00gFtexfDayUSA9yUB+5hPGs5MWZXsTIzZX9WIZzR43iV\nlT+Ksx6fSKfhRDTHjIPY48Y7XHvnNkmNz5Jn8nfKHfrFUC1j8nh8EtdkgxnQ\nj9s8Y4od0cRNauz83Uc9R+C1jRhAwYBfhQkZr6n0OBx0YWGJ8tFuq3UHCsQW\n7vm8BiAtw3s7pQ37d+ToeOMfcdKHQgOyDTfvUvoc4FK/5OkLLAxlkYKM5/zI\n9d4u70O8MsGkI6HboOjy+5JVY+BhzGtzxk4DVzNZtl3MilbJfwZAZJWVVKxL\nVIYa\r\n=MKTP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDH1NY4irLqjIX7xmDB3aknFmZkee1jVn3ptfCe459bEQIgVcQCkGHYVqv0O+WiLzHxLeJAblZhd9U5VbhcwliJMig="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3_1565349599756_0.3463863215481451"},"_hasShrinkwrap":false},"4.0.3-no-from.20190809124216":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-no-from.20190809124216","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.7.5","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9978ed4a17ef164b0c96a90ea9babbc97b30d8bb","_id":"@atomist/sdm-pack-fingerprints@4.0.3-no-from.20190809124216","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-H+IuhEQfqRNCAjKRxInBxIdrR1LE/Z+xtO+ULCwQ+nV5nndIAM9/nnX64XCKHCQlJFnufaPs5AjNwcFCJ04JSw==","shasum":"b807f5044d633662a18ced3584f12a40dc44a506","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-no-from.20190809124216.tgz","fileCount":113,"unpackedSize":2052129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTWsOCRA9TVsSAnZWagAA3iUP/Rz/GGRLtbvgruOFtSBi\nXpeQu6T4rUDZ49OFj9Jl0jR+9S4SFMHdl29b1kw1lQju048M4O+mCJ29FKDF\nNQa/pa6HOsg63zh8qAKa4NO4jgWRAfdaTg5g4IjQEN5Di21e0R/jIqAafoAS\nMoE2jE362/yXnV0LOBrdp+RyXKVp3ZVIvBmNlZBVazInFthdLKQcYFWdWH86\n3MreSyiEqmR4l9XTHTYgQAuro4/p6zOLA7b+5q/rQJRxvuSMZ5cP4QZ3rWSn\n0uLldOFxFja6lJc7xjZ3NxaXEY7+taHOE9WcHjwIGWrAMk7XS1P76X06h5CR\nRcs7DDoQkf+Uvnq4za4N2EK+CtMQ6assz2uqut9EbvGHaK471yUi/fReY5xY\nvyYld+LZbFkrKWDUP0RpI/lr1LyfjO+z0cWhYKNqExNWj8JaKf0C22jFge7y\n13G4YFN8IVVI4K83GKujzeYad92nMRlyUkrEkqKhHPGBPD/kplX4zcNDXGJq\na1Am3c0WMZ1JUbQN7KDELDNmyRyt1y3lDi1G1qO8hsiu2/HIjK31rwInBDgK\n082qHKYEL8noqDGP0ZbJ4jPb166EhcrpqpkFLjvuOrIDgqilVgacH3g4d5zz\nE+WHkEdbpYmqJBtbQBZM/ZIkdsKLeWXG+zgn0AIVtbuoY2UBiSm1lZyXNPk/\nomVJ\r\n=9qYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYbJaBJ2bdHvJtB1sx3tG1ZfwDfaZvTCXOrXRzKLqt/wIgU7C47PlwuPuR1hkaquLNGpi1Z5KcSyFuZuvGeDWvwFU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-no-from.20190809124216_1565354765471_0.4707217275698601"},"_hasShrinkwrap":false},"4.0.4-no-from.20190809192822":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.4-no-from.20190809192822","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b12625c8073454337caa733fa1e59f42e1f26525","_id":"@atomist/sdm-pack-fingerprints@4.0.4-no-from.20190809192822","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-O2hoFUY/Kq5gbyhJNBYH+eUXN2+jYYjY0Zk+qfXOfYAgSTi6UUxNmx5uxbsLXZQCkRMv0EoX+iUhgzxz3RSscw==","shasum":"a5c9b7a36d3c8fd943a0dbbe583d09f2cdd03fb4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.4-no-from.20190809192822.tgz","fileCount":113,"unpackedSize":2052226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTcouCRA9TVsSAnZWagAAFi4P/35iELgL26r1tzxjAzCF\n+tnoG9f35CEKcUIMZBZkpwOcLWybqJct9nPcCJT1M6saNFgfwD02GgDQSXFE\nkEM9d+yi6CWUEEkaQdPBsSSAoaJCT1mND0lHAJhiewrjEJ1I1q8BSzLsmktE\nXwh34lYlq/Plc5uD4zQmACDax8rL4MD2Ch9YKOdyhpePsQ6wlaKcYFHT9ODg\n/0o37on5BSPy6dV8X1Bq0s16PXwLAoxun2E5BjjTpvNWZYnOj5ty+IhbwMc7\nyhLZFhIclZmX8RveBRyQgRDISvRXimF4Jqz+HBVuVwr/pBgAjy3pMIxCNo7t\n+YgjZLYhIvdJOt6N0Ft/yULpxBeeHjW/CWdiAJ+zyrunJWhaB4ADhfzNBTKc\nUXznZ6mx35klE7RLfcHaX/7H4f9rY1dgyhNotVfKkv19BMqv0zAfiheEiYa0\nXC19BkVCZKU6PpidRObaSo7m5a9/CVZ2o6ajaYLtW6AP2KnEVjoYKtUF6+Wg\noXLl/SfYJN3tAu95Ixx9OIfMmBhDYa+/JgtqX+KpvexAqqxpBak9/BNMhzZa\n7uIw/H/JgsEIaI3WI7huuO0SRkq8zwuPubVLzRgl60nFtTA7FxIHiYWoNVeJ\nzQt7zJQbR2Zt2yoFFDhi1C4a4dnGmWUrao6uxUiNVOS/ahSJrt5FjBkd62Wl\nCXSN\r\n=ee79\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9IKSsog5HxzrRHpYYTcCoFfe720v5WLMdgPm3DLVf3QIhAMuwVeSnxLiiTXwooeNwXblSq2LO3utDdIQ/FfCsNtEJ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.4-no-from.20190809192822_1565379117985_0.7815836436932755"},"_hasShrinkwrap":false},"4.0.4-master.20190809192824":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.4-master.20190809192824","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bf51b8e396edb58324e82d99e66830c75cfb9b77","_id":"@atomist/sdm-pack-fingerprints@4.0.4-master.20190809192824","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1sjurpTuqWOnegoYUhmbDVH6rbls786WEJn9l0dAfWdA+QjdJsFbCNWHHM6WZtH8ZQGViifm6c+W1b6ZSWaqDg==","shasum":"1157a6ccdb8d4390246de847c1a519d692772aed","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.4-master.20190809192824.tgz","fileCount":113,"unpackedSize":2051902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTco8CRA9TVsSAnZWagAAWlMP/1wb+J8dkImoOm2n4T8E\nkuvoQXRVmRVHopztXUuIabXgBdpxaqmfz2gJDawsN2+m4qMFQi+lmfzEJceA\nkFX05ULUeOwQ0N+9XrhX8KNfZN/TRtg2jkAlFOPJ1qZ+w2/cJJW3AENzhdYl\nkwtquhcvoDIzJE5fnYTYQnb9bHBS6eFHHAO5PxRZXeOOYJYhLowjaOS0WMyX\n+Gb6cWIO460UNF2AsmQ453oJR2hLr/hF0BEMmmleHEoHvDmRTpqpAIlJ8TJD\n2G4MbdMeDOw81eiet7cdgR0KOlSgx/jU8mrVuwGkwNv4VcyoCpBaoKq0Ktuu\nfr706/+Bg0kqPoqtT1WnDLHp92LtTjWqYXRUfh0WqCLy7D3R2rezZJrJspeh\nJGfqP7BIxpwMc8d97bCBYnMN/ChQs8Wubo3WHXgAizByWzfF3tSX3/XbrsGV\nUial4Ypa23eZVj+UaPUKOliW2DEl+w0fz24xOwu36tojDe8lifb6EKEWXguN\n8x70XjWgwZlaYacngFP8VwrwDPgpODjJeNncbyqtJwjVdFMqSk/0fR8nnj06\nlUY51qLLYpWZ5pZLfFxiQpt++zjej06z0aEWBNKO1V6t2fvHxeSeKpGNXQiC\n0G+R9nRSC/8brnwizqV4H3C5z0rMSIzlOTtTSTAXCWrF2S91qyNiZbSYvU7L\ntxW6\r\n=gqQI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYqb1iyOb/y/S7le0Gr86WVdoM61Y67KDRR6rivp2BDQIgORIOQE3wH1x/KmTD9i/AYTvZ64okadho/krWXiee/t4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.4-master.20190809192824_1565379131829_0.10952632872736845"},"_hasShrinkwrap":false},"4.0.4":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.4","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"gitHead":"4e8ef7cebd59777ff6062ea4a6757f149a8b1236","_id":"@atomist/sdm-pack-fingerprints@4.0.4","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-dW+/zrGOrMwMraD8Gfo+PGHKwpoXPFWiS6VAlIWSgOJM6mUZpQqhjLamrfVc/R/II1wH7sFBvN7KnxZgmERREQ==","shasum":"b31795f79eef94b6e14a9db63371bdc26c695337","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.4.tgz","fileCount":113,"unpackedSize":2051880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTejoCRA9TVsSAnZWagAAD90P/1oz7GDxsUAVaIkyiE+6\nb84HJzIQGkMl4XS3yGZ0grm3jzk3o7BJswVkasAJFbnkF8/eDdd6/WwgJX3n\nVhSFLc0DH1QhEMol7xdQURQzZJeTDP7BRfcCg2iZamGkT2QeH4Ru0rvOm0vB\nJ2GkNfOZgeRX7G8Qwzv+M8YZ77NM4OFiePArtiU+K3sVjOxOE3L1eoRfitf/\n6pUsiVkDnG0eR/uLQZVkPQg9jQZRBmGAt0MmCXNm8+4FLKLtIyYP6ZVZ8sFH\nNWIMNouYMWJXLQyPoHsxhGmTXJr3qt3foVNU6ytgwL8gsRxjfK1n8WFjWjEU\ngpxaPzZAT37BBtU4LKN3RCUT9kBYBwL4s5vPlKtsvQypVTALMmxcSg1Wf0D+\nH/+jmeooan0I1QpXSZgqthIBi6fafZ54EMGZZswIzKydmDxoVj930v4G9yZ3\nuHpDXfXXtqFpVA72rn5nEUmxMUwe3T4w0eVIbdHVx35C60iWeNsGm41dTs+i\nkdy9i8r0wQ8UZHDKhsLht+to50q9Vv3VW3JZrinTU4Kfqcho/J43HLfeKj21\noL9Nw6DbZLOJXIs7HwQPmAyqjTO9g2XtMkJGZhaRQi2yXOr0ZI6K/97Xg//F\nnXRBxqlckpcLTZsknrqolMBo/1QrURhiylukf46om1EvTaspJvJXwNFuJb0W\nMAEi\r\n=R9j2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4SgLNieUYEK8kJfNVF7jcekS57Q3zOjPV0B6a1bLBTgIhANj6VmyuRIITLChzRGaBiM74pd5xa3heySPZeXoYQGG/"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.4_1565386984131_0.14481281535165036"},"_hasShrinkwrap":false},"4.0.5-no-from.20190809214440":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-no-from.20190809214440","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"383bb959c5f2165698b878b19fdb0a6cb46640b0","_id":"@atomist/sdm-pack-fingerprints@4.0.5-no-from.20190809214440","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Y1XbiAazrlVpqbs640b2sZy2B4zI1/7cgGtT8PRB+dSaA3B1ouJ6DzaSqscdRPVjUfT0cNlb+l7jd7gqOMfj+w==","shasum":"37b51f76ec394105d6ecf72355aab763cfdec4f8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-no-from.20190809214440.tgz","fileCount":113,"unpackedSize":2052323,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTeoSCRA9TVsSAnZWagAAR5sP/1mGo0lQaoAEWtF6ZgYZ\nqXxWjTDy4LHzTmlbTw7JkeAIlVqjnPttQiY38EKT0yyTz92QOCpSVPxqpS/H\nPaISmpXrVTcb/Ql/ICqS4of9rVOW1vAKZKY2c4iqtSv1rtuGQMS1NOeulMSz\n6qbNZ4lzYuLz9GcLu0YOGNPzhUvBGfmEFBtWVsAkTNyFQ/AM6FdovdV7p3b3\nVMt0CkKxKrjxt9/e0BSS7stVqUAoRZ5IXzpYsLBKAHij166YMoVcNHBfBOWl\nYegbGnCalaSL1/GZqmQ7h9nknfDHTWinRXi0Q14Vft4G46kmXAdHRRBvgMR4\nrNlB0kK+WcIkMVsIPEe5MjcK0YMCwz0SvPCnA1nbHpeMPPFMZuk66dwDifu4\nwEeToIRzE33yg+KMP/9t7pc5aaqaK3Z2XwMgSdSwP0QFvEbaPiE+68S0A1kK\nWB1LRbiguYKYEnpPvKtNR+PkISRvJXefQDN1BTPv8ViGhOE7R2BxcRcVPsay\nEgZBiAxWyVtIat7nJ4PPoJZZn4zpLgWiNBvmol1xTAqQWgsschMPcNl1BBHH\nncjh5F6qBX2Uxp2FHMAtrWmVyqZgGtvKuPfsAahQP+YnDBGUnwYiRLWyg7UO\nWZDCQsymaEqRMgbaL3X37kpGVC8tNsDvmSZWarQ8eHu+AwNGNXyLzBDnZ8dH\nMxxB\r\n=sw+9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn/PGpUvA8BTcE+R4EJEhs5z/ZFwnF8G/+7Ox29+qZhwIhAMFNCYPVuEIA6zS+zBQBFdsZHz8rF3acIZs1+RweqYNv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-no-from.20190809214440_1565387281793_0.2528225437167304"},"_hasShrinkwrap":false},"4.0.5-master.20190809221814":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-master.20190809221814","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f16718c6fdde8868d130f00be21c817581475145","_id":"@atomist/sdm-pack-fingerprints@4.0.5-master.20190809221814","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kK8EcvEhhjwyvdCyR0V4OonT3UDtOwjTHgoOTOsdcyyInrjXfIX1fN0f58J4AidVzM5m51IXEQ2/cLu2EMTltw==","shasum":"cf712ee2e1c31ac1241e0352065af1e4a3ec7208","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-master.20190809221814.tgz","fileCount":113,"unpackedSize":2052082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTfG8CRA9TVsSAnZWagAATgcP/jmzfC20xfbXQ+WZHkUw\nlQwy2HuGVmsyRbYZmNzaRU2/Yqz3eYFklBc4rO4BG5Zbsf9WQ5DkNoCAUsHo\nU/J6Aucjjfily0tB3pIcX3q+deNdv5rb6+S3CUv21CaCMWXTa23wsx1DfZvX\nQDU0XuR9cN0N8HLkb6XJMm/z+Wa5IWQCIhcHUgiBRvwsjU/EGbpbQXndmn09\nU58zI6A6eaSIAQufnFmYGN7ZVXNpUsry+8/0JCfZZcrisHr+DSLJkNvtlNCl\nyfEU8uXYo3He6YFS9jovgFdg3ERjoU+DOOZ4nX6uD6eZaJipBhgkw+Nfh1j7\nL9GBmswHyeuPaENY/5vrO0jFROr206U4nfIgGxZURNcf+MijIPBowgZE41bv\ng97GQZtBB8JAJT6ZTXPntgzMdyrW61hQpJ2kzZx0A4iArIuU5irauqiwAjSm\ntM1ZN/HBXfbVuIk8bGoosDZ24Rr6t/eBseePXfKTS6IcYBcrrsfpkGZj7ams\nUVHQ5l5VJHvMBhEaNXIKpFB4Pgd7Z/2ECeKC5WtNFr/Jp5Z0Z1uqWmupXvbh\nQP5n/grN63QJK27D82HZXKytrKa9rzveCc/qI/V5hq64S4bi4xVchTlEEEcY\nojj5YNW+ZwEaHMJXDiRoO2S3BOkBoK3snsQJn3OFR+ij6q9QhmEqXxjOcMr4\nb4+K\r\n=52Ik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvqxdPuuHvuB3c8MtRq3NnliKv4aAWGMypgMDm5Ar58AiBwr/s6IQEEYAUPOK5Doqh1EVmHXJnKo7HExsgDoqFyLQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-master.20190809221814_1565389243241_0.2861268868336748"},"_hasShrinkwrap":false},"4.0.5-no-from.20190809221807":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-no-from.20190809221807","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f484d7ff20b0984801c9b71f116330699750f7b2","_id":"@atomist/sdm-pack-fingerprints@4.0.5-no-from.20190809221807","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-entDfMiOHgnXLNGTajz7dOTKochkKoV95Rit6t274Mjjy3MsiI5Y41tGn5nwXWkZ+Sja/2vcdpjeOfZuUfn6/w==","shasum":"8c50f6cad60f44deca484efd6fd406fd6937eec5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-no-from.20190809221807.tgz","fileCount":113,"unpackedSize":2052406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTfHnCRA9TVsSAnZWagAAsykP/0UJE1mGG4lf5GN6SbEe\n+V86d8DgyzU69UB0k0InGvO/UNW7meCb+tleGpOllAr1mrm8bwaem44pRpiX\nLLJCctTLSxLSbUAzKkoTparKLakRezAeyZwpqKLuKrO1sX0yPa9MzuPbQF9P\nE9KCnecPtwChTo5MhC9O95qRUK9HNfiimKLEM5dGrXt5i4iUGdQXhlmBER26\nKLC9jD4zLnhaVtTl4Ak/E92aX2p0+rCR1Pl0vhQTx65te2yRWlygmjTUijLR\n9lJAT7T/di92jCsucZRTyziCN3RQ5vsxHdq9mih+gMOrxBsT11yhsECHu23Y\nBSZMnUoUBzZcV4wLkMmMFbDSUayGaoWOzC5hwOTlRfAKLddZHOadyes5rbyM\ngW4eTShWZtWO5uNRPPWytC5TQgQb4GDS6G3z8BmL/28sA6EG9TAuoXhFWYG3\nWu8Tu0XZTFqlTVX+bb7evWBmqsc1kiHC/yCv02BeLA266gAv1URUgPAJCKaU\na5FXmKvCPlQ47Wsevi8C2YWYBl+W66AIvHTjq/QTw7bG0X37VGsbRFGaL3oq\nKrqkMnPWppZLJLs9LM18FhNAp/V5x6LLgycuXEuLbtOj7Upl0A4sQ6qajAvd\nKpshDLvYRd3IsVmmIL2QloU1ZuXCb7kBdpLpecMZzHt3v94K0n5o7d0S2F7U\naJ/l\r\n=Ybs4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLJnOrJbgkgtbff6k5QQWtPRo5iXEcqAFP+m7BNPyoPQIgdbrFgqqOzHcan/NWi5flMJhv9FNk2JY9aZURRRfcjuI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-no-from.20190809221807_1565389287151_0.2699917887966339"},"_hasShrinkwrap":false},"4.0.3-no-from.20190816140726":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.3-no-from.20190816140726","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e73e5c233368eae872f6c5f8cfaca320a84297fc","_id":"@atomist/sdm-pack-fingerprints@4.0.3-no-from.20190816140726","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-NBavDZs9A5g8+ToyoxMwnw++hdrG9Ou9Gm3xWGTu+do0FV3ytHfu+9a/fRQPD2d4g9DwaSuZgj/icqho9F035Q==","shasum":"8b7724c3da6f05560fa69f52075f6459ef2735b4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.3-no-from.20190816140726.tgz","fileCount":113,"unpackedSize":2053762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVrkrCRA9TVsSAnZWagAAZdYP/izOazLgPLPS41G5qyeG\nzy+wHNBK4BMxjUm8fi7G1mDjgPqBnLCq1knGwh5bvBiRiXgKJhHTZi8ffyYw\nQX4kpWNu45049rl6fuAbhDsWwNHnQnFRCnmXps4fxgjQKzVwqixa9Vz2AT0B\nkBsv6C7F4ojrSkOsrCJmJfWsMxYFM4tGd6jq6Seia716+FtTr7TyIN4tQIwf\nSaDs8P6S/HKqrLYn+kIN5lACW4B9eiFm65ge9FBaEx+Tqw4NgJu2GejYvjdF\nTPIW9iPeGS5/I8TzqdKj6CF/hyYUZYBuLeM+wzmQ8i3BHJH+1+1joFKhNUD6\nQ9egKzA5hvXQPesq33DXhPDnKuZ47rGcLPzq/6ji4AcgqNQVUzFOOgBUaaLo\nHvkun4z8Aw0WbclNU2/XkBQUPkTZ6KKS4HsSD99VPHKlPiAtmicd9lDdWMNF\n+Ka49WiWL8wimseCsbzsshYI6t/O+HHeBbFRYS5VCSTJNya84pe5fqHn8Wr5\nL64edPFxEXRGVUSVa7Ty8jbVLZsljNdQRNhj56wD7PlAuOI7UIy2cFlqjPU8\npMUhUUveBymN4V9rfgctEBAqWakDUDtP7zhfE+bMrg7lorfdFXanjfu9XcEA\nRnRfSO+CrAaLh6B/vWVsS2022ShhiQfAGTAp5duQqJOz6FNfSSujFmFFp/qz\nzPhr\r\n=6zca\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7p7t7dKcHn+NGz4tkQoJQyhlEjsaDB+A+d15SvAYKCAiA1IEXhFbH0KNXOxRzdAUxrbOHcgdblpdIuZFqdfMwpjw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.3-no-from.20190816140726_1565964586528_0.8713311008455"},"_hasShrinkwrap":false},"4.0.5-no-from.20190816141537":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-no-from.20190816141537","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3d8aa2b0b73afae2db7db1ca2fa95eec40b8d76c","_id":"@atomist/sdm-pack-fingerprints@4.0.5-no-from.20190816141537","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+CYaJgQsKYSSU4Hgy9XBOwquiag7O7xbiBTp3Qeq7+Ux+U/xCgK2t+vGbs3td6HIKeTA8jAVJjr58LKGOQEzZg==","shasum":"91fb753302139c8d16f76d0a93bdc34958cc2e09","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-no-from.20190816141537.tgz","fileCount":113,"unpackedSize":2054039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVrsgCRA9TVsSAnZWagAAuCMQAIi6NoQGsvcUfuv/ys/n\nyy2/uz6nMKqHhhq4bdOdCF1SHaZozbO2mx3fQ0fmEATxxvBgsjwUBDjzMrW7\nImdey8GcTzwWqs2iIkNV59WGIRPwOimZNuq6yeSuWapQ7RaY2jczdoFQuGcW\nMlMVMrxxfnRTeAP6G1Q533+wiuFQqlpcF5WmKqgwncx2+vSFTn97oH5WQuKn\n2fkINBA5r+EfbnAox9QbbfgNmwyfjv85lciglU37EzW4VIDddy85Djm1r9mI\n7omZ+mAVOUaJx0JvQaCpgJNDE/agikK26kIf0Z2cqMwSIEWz8tcGRZXY/aTk\nyfedHa7naX7ekUAaFgZgCV0+MrZCc857OWAO5n3AKHYy2aSS99VWslTjVrq+\nn0zcY63TQwHZC7qN4yA0XacKvoTtcr5kh/vmS/5fklvK+pho1y0qdneHEpDn\nSIdIuk5Jxj7beXJjpRka6NNDT/2/e9sKbqL60EwYd7s57fo+4Uiz40/84sfv\nr65F0E3JwyN2P34Wp9yVuqw1AkhPiBhRiP3AK/0Ps86HI1uydPSa/wUzfESW\n2q/BJk7lT1G8fB1aVL94iI//FXNCt7b6OnDbG3zQvPN7YeeOhkbnlmakOqX6\nx2STy2CxfaG3cZD1LszO8d1aECXvQBen62fdA757j1MVKmcTXrYdeuPiePs3\nB655\r\n=um83\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN4EZOztTQ1ocBcTrXPYL9oIGSLMu2hW2obmn/blYENQIgfujI36GbFwFY6UQFVtJpf05PQbSJl/BJzSxKXUc3W+4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-no-from.20190816141537_1565965087721_0.6020439009601686"},"_hasShrinkwrap":false},"5.0.0-no-from.20190816150728":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190816150728","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e00e406559a988eef20a9d016003a06cd0f586c3","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190816150728","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IrYK+zD0iEiyCqPBBnE0leXmncxCKRFMsRc4Ghr3eR+o2mDcLMEKsE6tN7E1dea6dkyxlBOig9h5SBANmxW58Q==","shasum":"b613f528198d17c14e96cdc7292358cf0853c32b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190816150728.tgz","fileCount":113,"unpackedSize":2054039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVsc9CRA9TVsSAnZWagAAcUoQAJA25cN+bIWY3K7Ha2gS\nDZgRRqFuEZzT8YJSzypmR7a8l+zrkOsE9nBcy+4crkr+MBUEVK5N8coFYEf0\n6rpMgeL8Df6VNB8BgH292o0McEma2kUSvGrOPS1n6MQOzsc5whdKq+COiRnu\ngF6k3/KsYOBdoSiLY14AIxZjjafSofb5Vy5f6JaVCJqNImA5urJIsGC2b+RO\nc1jyOmp2vx5D2LCcupIWVuUpYS7imVmEknJHOz4yfYaqnLuOOS+yT+689yBl\nrpxgLhbYW4LTgR2UaSb1sF+EodERpr+TfA1s3gAdUc2gAjoAdOILBQFQ6qOJ\nKvAsb3U3omJqz19O87izZo7grShTbekf+uMLpeWeRMpNco0vV5ia5fJhW1n/\nccNyI4Abr7RFxKXvDfVxpr9RZO0vzaJ31HR2b9vCu3+KZAdgGPAUkTtk58eX\nM2caI9YF4iHld69A+VvSK8JfjZ97a+nXTv9UXwVM86ZS0b/ZM1dvxj8vRXoZ\n6B1SYjRThxpQBy78wJdo0tSZmM12VNszJVkHiWCBv6XQzPDIbLXwC873uUzI\nUEcOjo6VQmzP1u7NvEmuDPDhaIT6Imc7J8WTj5b+Y9HZAs3pKk4Osn5FO29K\nSCkHmVkLk/BoJCKUz9Sjyyr9nLK/er6bmXcEKjfzqQFiZ0j71kkBNRIJy3g8\n8yAd\r\n=yoVb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQDqE3bV5tWPmr0x9vXiPZN7ktGkUSLQoJU+dyxUdFugIhAL9mgCgovIdSP5KLMysmIrUjmNviexclC6TUArKkZasv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190816150728_1565968188538_0.49300972175145796"},"_hasShrinkwrap":false},"5.0.0-no-from.20190819144116":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190819144116","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1d6e2d292bae490f22325c4bbe1fea7617bfca84","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190819144116","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VzWN9qRNLMJzOnLmd0ybszESGVIBqwJZ/1WEfM6TbeZs5CfByN51YmRX0v62DBBByYkhqH/RF3vap0JXx5jIKQ==","shasum":"bb04ec98a846848da91e790b7bccd138eeccb761","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190819144116.tgz","fileCount":113,"unpackedSize":2055020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWrWVCRA9TVsSAnZWagAAVFUQAJXJlX/seQWLRqhO1DBT\nYZs9/P4XbKgVYJSKztEEWh55xM62BD36HeVb4hBxkI3jUSfYqZK8RX0G7/e2\noj/WoeK98bOGcfLUt2QnSpDT4to9ytF5ePxl1lY2h0KSXRjL9ShdXQyQ+CNT\nSkFNrRglUa9+X3cyhzde00mDJ85cFbzchqYOfAoL77OXWVDuLCcReB9/obZb\nVp37aESRmWq6WxCpn1dFqv/RHi/CmdfZUc+i8hX4NCL9fAlZ1m+7plJr7j4D\nZSHDu1axhd2q8oIxXamFZQjOmFZILZ2rhEQNRP5q4SCsM7PsJSs+h11JzxjT\n3TNJLL59wLWuShp2V/WDaXj4cludUmsC6WjNhzgLd3f6sjaoAP3dGHwMBgZQ\nVHeX2Zya4bwqrmpSl6RwqPtJfpIv1nsj2IbAbe7sHgVx5mC7jP3SzjegJlVh\n2Il6+spkw21tULug/fLbD2o3L3KKBWIqpLbLNaWJadlBzGQXW3FOvxY56OD8\nKhDKbfRxrRh1G/gK2NBj6fsG1ySV73yuDRqoeMFmF1pXM8/x/lewI5/hsBoP\nALa569wTPUt7OpSdK0yr+LAZSMBCaT3+PINLb3YK2qJ6Qs3h/0TE37akxCNj\nvDu/JWpArIBwAU/KQBQnyOq1RKvwhmcrvIkYgeT/lc8HpAVc+fqxgayVdl0c\nifok\r\n=KKEa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIIxCa/JG8ufAVWFKrvjI2t8VeoEgrLBS1xKDycn1OIAIgd7+lan2aXtQWo9I6tDfrFjIga3Qlg4ciDBAE3dkdn9c="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190819144116_1566225811884_0.7842011184721867"},"_hasShrinkwrap":false},"5.0.0-no-from.20190819150809":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190819150809","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"14aee10a279b1e1e7aff482fd1a71ea06ff69d32","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190819150809","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-eWvtB0QpWddfxYnQFQdTmKXb/OKFoCiOfvWeyW1U2/vJe6DeEGwj/Y2K74ugV3pRD41aRXr7U5fB9tEt6m/lIA==","shasum":"8daadd51caaced785223f8b953473718a15eee0f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190819150809.tgz","fileCount":113,"unpackedSize":2054039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWrwaCRA9TVsSAnZWagAABksQAJsMGtfg5H36ZSPhCi+Q\nfTeo4Kkw/ikmfyynF61SHQOCYDw85XWaGExJ6apOFgbN1jde/K2EW9CWIvgY\nuUgvtdiM7PJRNqhYpHcAeLi/QP5na04vmkCPsgsZu8lc7rUvG4e3IFPhB6O5\ndbuVm3kR4CSHe/CcJz+CJHU1HsXfOOsrh9Jlh8YwshHHAf4o3ivFguQM2Qej\nSrkVBkLpoQCSO7u1lBSGZZDjs9iMrK568nhxU0nK/umXlP2kp7JIJ678PlIH\nRT8s2nOAKUPxKLH0AINd9kC+6HkiBfEf/jiFLWf4Rpk4dSYCkegBZmACV35l\nbKAhGnhTC40zq6DxQyV8D7Cp70s+/3thTIZNRPngrnzd9S2dqmkUM/HVxb91\ntCCv6oSK1UFhCbhFHeKSROuBkUcQ2Kz7NEYYYtHuFAeWw2Id8/rIPdH1FGsw\nUkPQH5hwzai+l/IEdoWCzem9gVOxvYdO1yQPgAJVsm+poJNOSldejfUNM9Cz\nII51mcMni/24M3fQBaZxHq9qtAYxF1Fw/ZV9ulLuz3AeSFf40/UVV9hfs+jY\nhxHmlQpRswXj6kAqEbJrHu7h0xVyojZGFrJ4hs9eYQV2Kr/2+KflSETYB/KW\nhhbSffw0udaDaI5w6TNP+TThkjKEoBrgdQlflUPchVdBjsDamEXF3VGplPqH\nwWvY\r\n=F2KE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjcskGpbkF/ZGBrhijoL4VUNwgybq+SC3GmE08kMz6bQIhALG8MJNSoTFi0NSeebUqmsmYruwAhnJ8Yc4NSR4yIa5F"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190819150809_1566227481456_0.7525933772811111"},"_hasShrinkwrap":false},"4.0.5-build.20190820002443":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-build.20190820002443","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a019d2670ec3172111adc04ea5ba9d5162d2692c","_id":"@atomist/sdm-pack-fingerprints@4.0.5-build.20190820002443","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bTTtqhuYBNLelNhwc4wiKuHWN6y+Fhha6ZTtUaKJ6u2+QudewsDKLIiW21qog67Slu7/sf7AhR89xMUGG4WnOw==","shasum":"7788ed03c397c6968f730e2502704c2caa8559e7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-build.20190820002443.tgz","fileCount":116,"unpackedSize":2055187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWz5dCRA9TVsSAnZWagAAHBUP/j0UQC5nQcl8ekusHeBC\nwjIIn1Vfok+W9YRdyHjPAUvWyzgIXiTbRna5ZGs917iMEkna3ez5hTWGdz9L\n0pl/wfXTHasaF2BuYnjNCQ1dDox5o/s+81/TvPllinp8EPE+MSAf7KeF5iOY\n4AcJLXnaedkCFyCaLu+Ut541dc2XR0TiABarx1t6CiIIGu9V8t0Wj9pX5wJk\ngEkxwGzy0OGX7fW1LOnEVIuPxYYB0tk0AW+0ekAbVu827759ZKCbFEE5jcrG\nYaeFy76e8Jbt+2UQs+lvXN0mKzgU71TgyZdwJADvkE38amMIJek0PBX5Um9i\n3mOZTcXqVMZ3QOO+3UusOD+AcxJojGpRGaqHCnha+rJP9GrGCAh03SRiGVmY\nqRsc5G8iK1p8fu54fkVM8cG/hepyYwBpuYmTHzJmFwVjDox36zPrOZva5Qhf\ngwq0n0Vl+S0X2urSw2T077+/0z/ydszPoBwfAjOunZ1JDgFsYXrT2ohA56Dt\nOmVQgsxMHvKhwuLPGcLOGde9iKIsXia5CwH6dyk1MqzcfL0Q7NGFtXxJf+Ck\n+oIw1aleBJ2n/rGYP2VY9of9g/I9uwq1WbkMs+rBt7n+u8xeLiPUwEeaTIzu\nX2q877fUyw9bZS3SC1nGvVnRXURzAl3mg4A6HHXfVYcAWsgSf6XAmsRvvDLg\nJ/cE\r\n=NWrD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGleAZs8YGa19MYjoirYhmWOIyY2Y6Zn60FQeBwQoqSiAiAH3OwAv7gMTASIXp+n+lHmjpi/PEonoURLqIp3wzYFfw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-build.20190820002443_1566260828864_0.3544341477077244"},"_hasShrinkwrap":false},"4.0.5-master.20190820002659":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-master.20190820002659","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"eb3486aff6b07497efeaf03f5c288f4899d2aba1","_id":"@atomist/sdm-pack-fingerprints@4.0.5-master.20190820002659","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uo1cgdPrrmGat51NBDEPDBb2p22u7sLOKdRyRxHweJADR1iJ+uOgBTsd59+XhOZ3CXE+wbkBdmb6f03vfETE/Q==","shasum":"f5aaecc6aa57579ca9f1c5844cde0c4666b685c0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-master.20190820002659.tgz","fileCount":113,"unpackedSize":2052396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWz7aCRA9TVsSAnZWagAAxkkQAIKZyH5o+lX+A/eElNeM\nN3M75AnfA4qEoy9+0Trp6bRV9NU1wtC6l0FYY7IJJs6mgGRrwNEMExcVDkLl\nNs5SmGt76EO3NeMMwaVm/LHeo+75qoI5qYm7auymi52zT8Hs1cpXiEmbziOz\nSAo3bjVxItFaL0GIt4942YZEoWbPfmbmTLOPC2mQ50tnwk0iYoVgSsYw+S6p\n15qW8voLHi/44VWI4yddy4803NklX/Toi7uqLDbRBlkt7xHwjkaXSODsJjLo\nAZGz9w+5Amtp8doFv/ZbE5s0J037PEZVkYsfrJRR2Rn6mU8axVOuBEziJc1M\n1OtH6QOOyYtSTpgXnDY9cpexLMpkehLhDKqwI7kBZHSTte6WGHm+xKXLKB0+\nzCS8t+YiM08KoGp+fXNFlxnENbghgnUjETreHfDOwGa3/VMphV6JTt/4eLp+\nSmPW1jr5cB8d0w59rTeYhnSb6SiFwXrk2qSiHQSlAf+UkDUUFhpr6yUMXYs9\nKSEKXvE80lRIv9KPxiImRZiWAbPfUFvWg4Hr1Tb9JNRJ9iPqaRGSr0EqJqV2\n27TAcVpvekdmcLbsrLigPyzfbQWhCju6uhOOZZXHv8y0DVJxon+Jx6QdZP2E\nxhvVWPBNj7hGGPkcRhkxlZ7vTqdefPMaIfVpcYRdQVYbeVDIlubOL4hAKcGt\n/NFs\r\n=Pfmd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxYUkY68yhYAXUxYPwWYYJPejoK4TDtM9NrX5kcLopOAiA9FeyBDVygflY2o1zucY5iAB2TbdrbYImcR4GwgE32CA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-master.20190820002659_1566260953925_0.5145558032021924"},"_hasShrinkwrap":false},"5.0.0-no-from.20190820002754":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190820002754","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8659a5279023c3be4242fc870fe0c09f3df8f898","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190820002754","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-r4Viz2X6NQUCA5gW9imQ0OOCl4x+cUQPEcDZT61GT0uiU0R5h/h7EATBPjEnO083ZGkLj3s2VS2pi9MCWs+D5g==","shasum":"0e623b707a2abdf1d11ed658e614087aea041600","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190820002754.tgz","fileCount":113,"unpackedSize":2054353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWz8fCRA9TVsSAnZWagAAYp4P/R6sMvQkWQq6IXbQrFdt\nIYALXfq7fFFVTjQzvw5WjMtfZIgWNX1l1UvkCPuA7YcOfWKsq+7ds/Wo7xFq\nKVop0opqu7UhXspoY2mI598nn5mLOmw3arbtfWw/w8nyCBMWFQ4QamviKKyV\n00sgMhu2svcWlQvq73dUDSfi7CvDD7Jp9bq/KfD5ffVKRZaeBz9hy+aEoZ/X\nonbN0TvPazjgl2eZE7eKWxzjpDA/RKxwYaAWgVNDuxqOMOyUIiLs4iLGglLK\nl6bATPps5PzdKjEoXenPBzJm+Z0U1sy//+JRFq15wQzdgyWyv2ZUmSLHLp0w\ncGyZwQ//4egjjYufeeljF2le05WYbEzu+ZlyLSScVLfLQWO7ASOnZF3yWEP+\nXqW3Y6Yv7KKSpGDxfEGoRvKDuRVOs5JwDkGyGi8jA7AaEf6SUIH3WdnazGPb\n4xErbf2atH5Ng3DQ2SCo9sCbe9JUvp+knp4RQFvwf4Izd0UcInkNi0gZrzi3\nGbti8sOKpQLZITN7OkF0FI7PIvdvs0TCvUnkkr/a3kgGNjff5UskRivBi7Sd\nJF+pEcUqDS1h6R4aVdz0XtwVwhnrUzkgvnhBMtVxO29gBU5V/UK/vADndO79\nP5l9hQ+dr+627NjszmC7gbZz8b07gKJ0l5VI9piUTiRZQhad67kEI1arj4IV\nxWVb\r\n=QBo6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6R8g5CMXxkkSGnIoW2VFiOqVkgJcsqSOoRPpWCW3gkAiEAlYxA+YMPc5maIWXCEGYPmt6aijLJvpEqN1NKMbwnHIM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190820002754_1566261022339_0.6016486812340933"},"_hasShrinkwrap":false},"4.0.5-one-aspect.20190820014017":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-one-aspect.20190820014017","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"452c14d725cd926e51f20bb09822ecf16e06f5bd","_id":"@atomist/sdm-pack-fingerprints@4.0.5-one-aspect.20190820014017","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qqjWvuFZ6Y+8LdEN7lWFtvG/T/zOaO6WK1NfhBMHEspZosbSZwhwkOiJRYmwWItjXsUNuJjKycmFoY0eVwveqg==","shasum":"3c3adfc8af862fa9df7b1ef4b6bbb4863c0fc719","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-one-aspect.20190820014017.tgz","fileCount":110,"unpackedSize":2049450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdW0//CRA9TVsSAnZWagAAh8gP/ApZsM08rZIvfctH18bv\nLfyY5F66VzsX4/XpJojrkPR4YYuYTSt3hkGhATGdPzWad9Ao8LX+Au2Tss33\n8C/MLBwrZIhTcYOoxavId8trazBKCACvvLRN7STgJwQfl6ZbXA3M2+A7MCNS\nmAB7iaQT7Livz12x014HRL49xg/Hd6fVDnJmQfYv5KpTekkHG28+hSDJLBsP\nt0Xfs1HwrLuL43UK0sz0fiREj6Nc1IO+4GRV28h+XlYJfaQo0Gt0q4eR3git\nk3y/ZxiJ0ZruembzvcOPv4kATiZ+S917o8TbiKG5cGX5SMx9Ip44R0hjWUeU\nOXFjbdFtpTB6xAE4ZuHjxusHblbEqkQpIkGCsHtg7i6m0/I4fdRIs/iIt344\nSnoE05+MFBhBVhnIlW6evq9JNL1ilRcGFMJ6UFtTbXwXkhwL6xIEoA3lMR6Q\ngaHncCeYua1oP4sxkFsSWCKzluPnH6MOwGXRmF5m8ExAfytlgq0BreNZmFph\n0avxoFgGRL6d+gSo8k9veJYNB41j9pJIq08CBzyoJ7VGSFkpuQ/QDwapWl8D\nVXrIfsWIR4OxTvHKHhkwVxXURhhzZNstC1/rRxjWNrLyf2eJkmM08gzKLpOu\ncFwh4o8wu6u+y3tPU4lkiVB5ua1YTU5oRrkXDc8gKkQQpyp87a8/YdLA4inq\nx6T9\r\n=MYYN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgY8+vuQSgaRsHZGH7UYy+BmfBB0cjtZzRIwq8bzMWwAiAKfiqrYxWH3DoGZqfAVln6RTXguO8mKLFKrPXdkXXkCA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-one-aspect.20190820014017_1566265342681_0.6847878631846198"},"_hasShrinkwrap":false},"5.0.0-no-from.20190820094938":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190820094938","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e2e2ffcb3d5c8f8eb7d85c26865dfe3ad73531c6","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190820094938","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xMrF4rX/CiHWZQd65rIQff8LuU22yiAXmkRkPF8EQWFKtVcPSjp1gwy3HL6BbLOB7fgKeBhFNhlXLW+z/DsXDw==","shasum":"e66212743c48d14151b718849be5c880b386251b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190820094938.tgz","fileCount":113,"unpackedSize":2053749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdW8K2CRA9TVsSAnZWagAAmIEQAIDcTeuGH8EZmuBpKeWJ\nqOpfqmJ8y9wfTMY9sVs4JA8tpyxT855kXfHeMhArvBLTtG8VEmUaG6+KD1yN\nwGT35yarfo+Wxx65TlMmHjTkEZwRKeTEUfFnLPrhjj1JVweSYIQjxvFsMLop\nCSF4EuCpHps1hxSebKJveZXhvTYRIxYCbBqoSGEDjvzowUw10UWbYgAVPdMm\nXZWO6YDowYzSBSqKU/VIEqDqZNtJ7FvjUBlnTUL0OO/5fU0o4mxuGAbRigLQ\n5IG6FGkCXINv8R37nbmITBNSCOKUd28/ScwWJ2Gu//bPMtei0jK1tvgObQz9\nKnZr172ZEidUnfsW7cJzkGYRcKbEYhC1TWJv2jb3XTUuimZ7QFS8SZpT44Li\ncrsRUvPZTRrA/R0KBXwMK04YK67qwzroEmLaws9QoeNxqszYLiYXu2OolL0/\ndncQBqKSeNGTcw3TTGhLVGk3XTdnv22CX8Vlmc0VxU8bzYdVR+SsA42RzC9F\nhnEHiqmD0oOcnuH6eM2sry87hz+FETmMfXotbTfaZDPWWrzfRou35e2f/rg1\n6cz9iX5sso4QIu64sx7G6+KoHFLWXSjeDDIBlazZj383SEXvfsQhUVXPBqa4\nD6/eXVIfB3ajICDzYlCCvAKogBgm06zfV16cUARyZ6b091wJg5A3CHVAoe6H\nJvsp\r\n=4dhB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMiOQ+X+ceepBKDn0+SPPMoo5zgRSB+j3ZaSA/9Qf5JAiBEEpP+t9IwicTqZHvrDyrTe8jnAhgzRyz0UaAIp/nSsw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190820094938_1566294709926_0.5978909009849902"},"_hasShrinkwrap":false},"4.0.5-no-base-aspect.20190820163433":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-no-base-aspect.20190820163433","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"644c576c5ab715fe24fbf76c069661da89db7b0b","_id":"@atomist/sdm-pack-fingerprints@4.0.5-no-base-aspect.20190820163433","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2tX/qOW0050G/vDbNYKu3eS1Ks8ysPkD3atoHIfKw2nYPEioy2V77FEQW2eDMRG40i/q3ElFibIfYPEI5dqyFw==","shasum":"7428c8548e54d2a63d914b76ddb3ed5e045592d8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-no-base-aspect.20190820163433.tgz","fileCount":110,"unpackedSize":2048725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXCGjCRA9TVsSAnZWagAAgu0P/3bQakVDaM709CUvU709\nhyeZcOyKsXAilIPK7BWDCkw//JvT3cEqxasRJErpavREmiPOe7XBkqY26vKc\n7xOAPrL3WPk6EoIywFYv3njOMqSy0JFCUnxdTOMNG/hhBz1Q50SmneMIDZJp\nSgZwl4pP7Kippe+xUVutReRg1Y7iZIhKKu0Pq0g++UtxFWz7ALmtpv9ZEEAu\nViYl4vsawB3VxRAG15ij+Znps5c7YQ4GWZA2vzR5LNjRvBRk7bH9qDPxjqlw\nQAB8CLCf67VEI90i0jlvyMykdebLXAK5aurIMxCN9AjcgkxS2P2L3BZWTK1S\nq8DYm6S6G8cNuMG/AapeNOGA6qPx1f1RbgiLLLKXSVC7lo+VVW+zqi4Lf8TV\n5PQBXGmJ4lDBvqxqg4UIu2YDCCsfnjq3nJb/Cn8337kwbU7IX93rZd8P97KP\nEv6pEqWrJpwL8kAzQMSZgJ8sBbXeDSUxXYypRknigPZIFlxJLJteMFzpLtxP\nT3CmohSRY0wYxRzH5KV1G3//jHi/6UGcl42bQXqoKwVHRgK1ABm8erprccye\noVf9KrQhOOj9aTkNrydT2L0fmOyfVmmNWBWR6ISYzpE/8NKgd9/luhpS0XIB\nZPzqSxJjzXqQSgGZRjyFz7qwtYnzYp1YwAwKP1X2KUS5/sGnzr6Xl1iO1IEd\n1eMP\r\n=V+jD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT/k38q4yMMg8bMMCrj/IVInOLBtpT7SlE+rCrCitZggIga1szZJPF+9toixy8ubzz69zpZfHYHMuc1MK/5QcEoLo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-no-base-aspect.20190820163433_1566319011126_0.48192694690519255"},"_hasShrinkwrap":false},"5.0.0-no-from.20190820173431":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190820173431","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"05b9467e0e6b4f181cffd669efebf12fbd4aaaa5","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190820173431","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HfBJtz/cwA51umpql/ke3wM6vqN9kloh85dPQ3BHoGANoKMbdzy3DtEtR4jwx29Z57rb8RRPSX9EQVKoGSb3KA==","shasum":"a060b7235815f877e3fe5a17220ff26fd264d9a9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190820173431.tgz","fileCount":113,"unpackedSize":2053925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXC+vCRA9TVsSAnZWagAA7DAP+wS5l1DnGZcGQZdVS9gq\n8pJYRQjcY8WQGfKDU38MfbeWcFQ2Gt77m9nV7JFmyHLVnqIl8Wqjck7vVbBS\njL7iM6fDbIgyhbDeVJes//4KsEAchzF+v0hqTWIwypMT0ZO/hZ+STOpTAGMR\ng8Kq7nLvXdNFyI4jKI7Zrf44Zx7GSlz+5PkbQrQXGHxFtJHGyl33IG/9cMQY\nhJwOMaojQwzL4oWEwB54pSuoZX8FI8/nWqEs3+WkTW3MovG4Ppak3oj1bPqo\nlD1phKToeBJqGOQa0gf14ug+slRSbLvEa3zAbZXO5tpQuaXtgPpTDrTlf5Aq\nFQhvibXlU5sGSnkw5zEmhIxce4yGa+4jYFPEWG7WZ0Dz/xEkX7aTPQiZC33v\nhKGPkcECBNjgIcMeu7muh4BrviGI5fgBQsTg3mlPdYZz9hTbqjZxVjZzruda\nAwBpYjDgsrGx1Qenkip+VoJIT+ubJ1ExmY0wrBfqXNsyaeMHw+eZBrZwahhe\nNFtOGed2fBp/AzILIXAojHDAh2Y/TaOziYzPSlSt5qQesGoM9ZxUytaEQmq5\nQ0ZT2QvOvfeaOflOxaTxx91glUgpRpZWShmCzNhmBxqW30bUYkAQqILdsKCX\neWTxoPDRchcofwPpLT/X2BfO7C8etD/C9S9auTvyA8SRzQPqm+JLD/Wv+9bS\nZ/v9\r\n=mj8g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaLEEPGYbaFRL87wQiTID96Q8xIO4W7V/geqCXDvzQugIgevgzm/K8mZwmTLvS6fHYZcsLQMBwD+94W/Nd9/QEUGc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190820173431_1566322607045_0.7185049823694989"},"_hasShrinkwrap":false},"4.0.5-master.20190820173427":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-master.20190820173427","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f9721c383fe1beb59f75cadbd09c48eb0d2ef3af","_id":"@atomist/sdm-pack-fingerprints@4.0.5-master.20190820173427","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SzuN9a4PTDEPg13sVLthltYV2Im7uFhHjQmEunVJq0WYiJs6to7ra5yY5c2+cuv9USnsLtYvf7lkyR1ifAS1fg==","shasum":"0d6d2718a45c391ba6e1cf0b4865992bb08a44e9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-master.20190820173427.tgz","fileCount":113,"unpackedSize":2052572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXC/BCRA9TVsSAnZWagAAzaAP/3qcl5sV8awx86v+GLEO\n6059Qscte/v47/d97UQk/qxtK30tpONWGaLpQYC6PeZHtL7yOm592vfQxI1z\nCmxyGLNst6+s/nYKWR1lNfo3lhIrlbkM9SBE5As+BCU+e78p+f9YsN7iirT6\nH9V1VDf5tfDfviSR8MX8cA33LGM32aGID1x0wPIynp+ffrPrs9RXSq4hvjf8\nIq/CshYCiVLej0ZVFhB6ZK6VsR4UM0pTjv6AbSbRo/hHb6hh0Kk/v2MGcqPg\no86CYjkkHL5iXAAM4s5QKHGKstG1FGC/FCwX1YvM6Hn5OkK/b4NvngLrYo+y\nhmVBa3q7AQsWwoI4Ao9tt8wnax9ixZS6NHXh5S4rzr8raFnx6UXwH0OSLdOZ\nwkVSWe//shwsR5b0ZhxjQJMsSmN5jffpdKVYJpy1tZRY1MYhx5az1HC9X3V+\ngyeJFwsyXvLx0OZS470fgWXYOAdW+JXDEW1ax8+U/fdXtJuGgEsqoP+/6uZy\ns3wQOO2GaS99ESfZY5dcdtcVrPWjKAo1G6sDGD/BbaWMV/QwrpQda73yMfzf\nOTRD1Y5Fvy02T5FYbTtoEYr7wPH0taaDDQ/rdoNytPgNEPp3TOgKAKQU1XNx\nCqdGvZyij5V6aQy9kt0UTSMDu71oB4G8ahzrSZqFg05YLGEP2Q+4TzFRJ6xA\n5Sme\r\n=nUpT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaaVvmobsSscKbfGgE9nRREXuhsQC0IDXC00OlUh/llAIhAOHUDCqOL8MiW4jGPvg8bSh/GXKatctq6z2U5jOrRRrx"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-master.20190820173427_1566322625281_0.025876570090843876"},"_hasShrinkwrap":false},"4.0.5-no-base-aspect.20190820182446":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-no-base-aspect.20190820182446","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6a1f04ed2aafd6040180bc964d39e18a385bf3e1","_id":"@atomist/sdm-pack-fingerprints@4.0.5-no-base-aspect.20190820182446","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4nkMbZZc8d64K5qHNUTPBJiwNqnTaAjfU4CwsNNM02P4WUiLeLcreBtW3hSraMfJgq4tEjEN9bAHeqEp8W1SJA==","shasum":"e1a171f2a1ef728548054fcc30f78974d3e8b7a4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-no-base-aspect.20190820182446.tgz","fileCount":110,"unpackedSize":2049284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXDt5CRA9TVsSAnZWagAA+zoP/AjVxUp9jJxwvhDMM07R\nLK+73CQkC33UD26IwI5AN6OFzmnBgzP7u/Jxg8a5l6KTt4IXJ+Y9wa7coSEu\nDIqJI3pMaeE4vIZi3p37IwnYIcPyETmnVzW7+KZN1+hpxY/4TJkIMUgMC/JJ\nYJv7mgPS1GgH6if+9oBSBz3lF8uKZp5cxdPCuzkftkC/iZHNkazT4ppH4uGP\n53GR2stF4BE7TgcHQs2kTh54gYkaV2tFbDaTTPkKiJ1kN6NWodwdYb+LSt5N\nUxKxIV06qK2by+TN14HPKkJmqoVv15A2XJvPz0EESXSfIJ1t/0mN/OAW0xcb\n3LCMO/N0+VJK68f8Oz47zu+O8GfXLLbY0Va3C5jmGwQrNGH5XIf8zuhttlnc\nTOMLBy+zPls4lsYymx77NDmpu9+Nm+WIohLJdg+YNVVVIsUp8eDJ3ZlnJBjh\nP/g+igKgCKWke2uDcuKbYLYxdiKB0CFTS9NiUyOEwfFl31OtgfKodj2AM5Ck\nF+Vg5T+y08jGWx/t0zSRXwjBPe/2S5sBb40DcxQvwMeerEv4uvzZoYpd/Zuf\nGH/jdHxM9aCDE6NVRP4dhIZ5YiYk/pon/xj4KesPHI96RvkGa2lMl6+uRTBw\nHDA3dP7NmFqYVHYS8vhkTI/zk7vPSQLziBF5qCvBwZnAgrbFCl2WhNxhbhKs\nLK6e\r\n=+C6x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDfnByJyklOtQUIOvMpw+TL9N0gueaW3GdxH7/gMvqFmAiBlwX0Me+9wRWtDcsZZSKuyLuJp0V++UlfueblRyrsdFg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-no-base-aspect.20190820182446_1566325624540_0.8659671882654834"},"_hasShrinkwrap":false},"4.0.5-simplify.20190820184117":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-simplify.20190820184117","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"40f1d685e2c0bd7c3ee7d907198228d372b46cb5","_id":"@atomist/sdm-pack-fingerprints@4.0.5-simplify.20190820184117","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4qy2YTGn1mySQHd5h+6bXReoOoDoRksXe4v+JtlHiQjyPqTT4mZvtDtcQ+Hq+0z36sx1sPySaHVOlrwIGzKtmg==","shasum":"817dc108d29afc3e57feb9272811f4255a4fcd0a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-simplify.20190820184117.tgz","fileCount":110,"unpackedSize":2049071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXD9OCRA9TVsSAnZWagAAiNMQAJpDXqIiKRQlxfDAiNUy\nni6A66V43S9n4elelFHQHF2aDLeP2pFyJqNaHjIArgdPu6VH9UinBkgspAjx\ndXokhNNxkUgVl8yZ4D/Z/Cncw+ew1ovDRis/FEs7nl30WqMdjs5k6vijc1Ey\nomCxg23xb2JClweJXywYurw8IozwnQgMzU3dtqLYpQQ8gnPxecUqNG52HIjw\nVeRk3a4Tci7qHWVR6rjr8h0YFfpubWIz0D2EiqI+RYbbHnfJWkw8UmCt5wJc\nB2GyzBwPD3YAtsmyVBjRRekOQgo08JPLGnUERmIyonliPMoGB4w4/eeixagb\n6ANxVjQteh7xrRj+nd2Db+rV7Z+U94g4YhKgYZZ49XtyucRbhHD7R8J5hjI3\nWCqPJiMlJP4CjREMT+3mXJTGyh0VaKzGaQTjbPiygzjcKAk6UaVkQ27Gyewf\nQUJt3LbubLL7I/gI/SS3L3gNo/ozWiXz7s5o2JGiSzVOKc+gekdA8ctDC0M+\nSkzDPzS/zk1M3n/t2UwFTRSOigturjsPh+6tySF6dxbD0wStIlsG/jdNPtsM\nkXfo34gRws0xJdBh4+8PZ+V+PytzX2x0NzY7P+N3a4MsnpHCrWSpaoSRAA0i\n1DlkIO/gscKec72G5oerzU0SNVWE0XdE5d0m6Df0TqdV+w6Ukk20KgZ44Z7Q\nxWOl\r\n=2TqQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi+IT8m7OZM2qMYJf4a4sM+KriLWOHuxI77+FrQNH/4wIgSmgUqXALahiY8QI8jdSj3YUcXg+IQd7N0oibBZXyam0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-simplify.20190820184117_1566326605061_0.38433811260731265"},"_hasShrinkwrap":false},"4.0.5-master.20190820184139":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-master.20190820184139","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"28c3c6b9cbb9b6ae3befc8a57ffe4ca6d762f579","_id":"@atomist/sdm-pack-fingerprints@4.0.5-master.20190820184139","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HZlybVbxIHeHDKeWZLRj2dHS3SQMXgbamttZJucUsPX5Fr8VUJcAZlXLkbXknC0+x4aUQfQY2+n0Wx3AgqMZYg==","shasum":"3eb3806e45bfb1bf86cdef68302a67c917540cc3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-master.20190820184139.tgz","fileCount":110,"unpackedSize":2049452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXD9rCRA9TVsSAnZWagAAJvoP/0rA2QB3PNuoLxE9HgaQ\nLTGbHzpRVi5CRmeErO0clF15QRh1vrHKNhkx9cC2R0f5vz6YryxdBE+7stbo\nMuwtWeYw10GMO7Mki0vxZEWcewWXIzkfePZ9lhSMcLrYpAjCJc66DCRzKAeC\n9j0rwgQxHN8rKkvZnyObXAA8+6+qEmlbwJ/dNcG4aW+Z4DOQl0QduIn5jMT/\nCXoVmcTNISwIoaBPwBJPHKa9tpTkzJHbssdwfHwHOg+jZmk1LtcQXAGZdmES\n/jFgMgouko7FHdwQIcbcq9rSnmujpQPEoYZDTZFIVu/afVhasLS6gVwjRL3c\nc8JbqTedHiRRjcr5PT6typSI87sK2+Y1FTpZ/ecwYhqoR/7BBm+OsrP0amHn\nfyD968dzRq6TeflJ1rD6BzIJi6fzU/WVvPzE1VZge+luX6g5khU/iF/Unzh8\nz48OYjPPN6JNh9JDBG29MTctCPCEULDNA63Cta5mzFCW3v0v6zf+whQwxBWD\n7qPteZ9QaTNYurIj5lPQuiBiXyzhjlsh/vISUClRA549deqQUD08+PZtIrCT\nbiFx+2KN4Bsw0lOZ+t622M0hzPIrk1tzGM+1Px7ktZ36PFuHK9iHXX8KQrl2\nr3DgoJNQwyymtYdDlfCCyCJIUJZRETA2MSpiDkdVQCHD2GxaIsCdGSqOxOEx\ntkNf\r\n=2nLL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICCnmjc0sbG8dP0785ieCXqYh8OeJvnbindvsqjoEO20AiBIXqKpTb2uZlZMDwGs1mpNYxP5QhLhUyygK3/mQ1jM+w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-master.20190820184139_1566326634943_0.6506447448499875"},"_hasShrinkwrap":false},"4.0.5-simplify-typing.20190820190946":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-simplify-typing.20190820190946","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ebea756a310abff19f5700e4d015ab8115c042f5","_id":"@atomist/sdm-pack-fingerprints@4.0.5-simplify-typing.20190820190946","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1Q9+MSVdhJwrRM4wBT362bN0u0z55CTQDNrZWGi7kJNLVdYovBN2vxbyqDQu5B9kN739Zm2o6/uMQ/YlVvB78A==","shasum":"09b95e576767b54c4c47d1a1c7dfc593611f7b1d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-simplify-typing.20190820190946.tgz","fileCount":110,"unpackedSize":2048918,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXEX7CRA9TVsSAnZWagAACyYP/iL4Ql0NGNBmC//8QP2q\nkZwQE0vDPGAbViuHSKcHzV2OYeWwR1M1c3F6xniHqytf4atfJV+iFP2D2xXe\n6+hlbS1bICDfXGUZgYr8RF9+d3lJ+V+mWJj1LcO/Zk8aMxCrQuXZ1DB3zdif\n6TUku4J9l26e8VVrrAJlhEXlPw7eDw+IUAEQxxhJjLeUrWwuedrkziBplbrR\ntFBTIT4BSYmg91XLrfG+M3qkPs8ez8SN7jLb0Ks3qOguvYd8vEIdmzJ9IcHr\nQdLBBhMsgtpnmVulge4ieuDgrjjfXtGSJdHikAgwynoFSpozmhq0GPsz9Pck\nbcA2qz6jBl7+CFpJG7WLKHmt82pQbhhVbj7czL/i2eDMGbRS4p1ny7lw6RW8\ncrgoNZoT4/g70YQsG/uP2y1EkQY3pveQF/yds8Hr28Og/MKQK+mLgtp/BpcA\n4TxE180uiuQFDx+KU8c4eiAB52789fQd3nzRImjrlfzK04nQI74v8H0GzlrO\nuGxEJY0WV27/lJ4u0AatH5+/mb5LOqfFXNMK824mwhiB0I4FYyDUIUWESWnA\niWL1wlhg8oz5mXDHt8+P3MI5c7HhZ19IWAM2O+ZrorUAJZRWjdYIcTWfGFtN\nqWoXKDvDbDegpJ0dnLYtDk6Zu3bS7dGccrc2eCAUG9buL1/0ewxc2JAm/4wW\nb9H/\r\n=k/8r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+CtfSHgsDDbWR9rPRipoWmPF1CC+8qGhpDF4kpeZC7AiEAmH7D84twDLcSdeVwLID1l2kvnOkuaonNP7VkJHo1Xqc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-simplify-typing.20190820190946_1566328314898_0.9899397270336705"},"_hasShrinkwrap":false},"4.0.5-master.20190821001652":{"name":"@atomist/sdm-pack-fingerprints","version":"4.0.5-master.20190821001652","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.1","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.14"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"639a384e6951f62c782c444cfffe196b00471cc9","_id":"@atomist/sdm-pack-fingerprints@4.0.5-master.20190821001652","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4hURxygqrSNKQIM4VCzVg50alZ+8qVhdSgDeE71NERyBGpXfYsqVQ6Bvn5Hkx53+/c0u5+e0ouM/LHZBjF6O2Q==","shasum":"a583ba1e6c269958b7c8e17033790983ee76a12b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-4.0.5-master.20190821001652.tgz","fileCount":110,"unpackedSize":2048909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXI6tCRA9TVsSAnZWagAAFqUP/jaDQvkcMtz3Zxvl1DlK\nC0ZVJHLhDGQfU6tDYj1/mOvPq7Qrmm7C20O2eGkvKLsmmk154lZ4zGA+Ecdz\nqaVjHT1ylSeYc+UhBf9EudOi04S2rMHD4QR2018UmHW9E4TZu7MBPF5tdxsS\nSc30kaONx8FOEhMDS0RyPxgxAnfFemVLIq2lsYrNOvhYWT8sIkcG6LAtmuvy\nM8kp1UV9GZhMEGaTDMnXF6TGyfZJRM3fX9VjjcKM7MVv+/kKjUTifnCNiYKF\nPND7pdS2PyDEhYkQri9LkRR+aF642WAIM+VNvOo2vyxOGD0pG+7SMnX4e8wb\nL2yLXOGW+h3dU9Uz/+xs0IKPuL/nb7pgUqc227a31q5RJ1NOkwaHCYaa0vgP\n+ghEDY+wfttjifOHm+XE48VSrbfkHfFOuoZ54S5ND9vjdZCo4eKT+4gu1iQg\nKRYAD9i1F+R0gt82PGg57jx+SfYlVWjGo4DOpo3DYaHFVQy65DFhmsCho/lg\nZApX3ZTO8gm1AGSfwbKQmzJ2hZcgbmir8Uwcr9RB2V+eMO8QDCM0UMfKKDwd\nO1v7PhMry3ifDr96g3XMhSSEBVmM87qXOM9VAptXc1zzhP78CoQtmDbE1+Lh\n0+4gee95ZFwqyINzeYpMiQ4D7hfPpRcrRpEgOgjyOQBzVtzZ6EQ9Ez5w4/cO\n85eV\r\n=Y5+N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvlqAImeKvBGva7TXR9XAtZCBDt3/mXGdbgF0qRp389gIgKOkkf6Oa0afXx6NPnk9rAoFXS6gHt9CbS+t9M+SoaLg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_4.0.5-master.20190821001652_1566346924929_0.06562527093728443"},"_hasShrinkwrap":false},"5.0.0-no-from.20190821074558":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190821074558","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6e86db12cd35226c36b459f20a6c7a9bc74c8505","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190821074558","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+lPOYllisgw6X591w4tIi2yfg1rz3MQfHzBuZbawiGFZFjMrU7uUhmOLINCzMwJrUW/dWF2TOCN/UPFIazuKjA==","shasum":"3985f91565727dd2d975e2a88b15df39caade468","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190821074558.tgz","fileCount":110,"unpackedSize":2050202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXPdsCRA9TVsSAnZWagAAD1sP/2fYPxUUR0iklxHOvtIB\nccA5/fdKw99kAi1kswajU9/2Zr2iB1rgqzdrAE6fRCKSa2UX+SqMgKnjRGaA\nS1jKzXrTXJ4asBBsSGCNiUUAeCKXnP/TCUXAS+0PLahN9KjjPZZXUWIbXthr\naMJKNF9M07Q4RDZ0H8kFiu3mK+6GiIWxM9HLl52n8WV+synepvCQmCXDm2Yh\ni42rPxPLXRXLQ9zMIDKdYPVln4pUoBJW3elW+OXmJUg+wmmE4Za0uXDObsug\n9a7of8YejbAKyHsj8h+Ykpbuu7n50fZxRgQuDKy9kp/dc1dqoi36k8oddCjI\nc0Jad0RW4KT9ES8BuaVGhahiHtGXE+P1DuRRYPyHihuybyETEALF3KyCp3e0\nOLmNO46kJimvjKci1B/MLoo+GHlt/IOBuFLvcGmfaKT1peCqJK788GJbGRTN\nwjWrzGRfgQICPe9ovyqCiABgYRrm7lF92RmWuObFRKl/J8Gz/BWhb9EuJwkC\nmfmBNEYsVZHNvillREDCJWZvJpKKiRDziMrPGeGiCjbApJyxAmeWPO7M1bPZ\ngmKNUT9UiW3ebcRsvR4Ewr5mdCa37ZxOhgA/TBzv1kHdcoIjrVnAK+GBWF2d\nvgk3HLxQ7f+nn9NP38AyVAtDj8Dbw3q7kDx2N6meCrRs25m6hWd6BfpadO65\nhPQR\r\n=XD6T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNf1dh3++AriXckXbPrCqE1HUkmngV8g+7SS0eI2o7jgIhAM/TrZqdhb97bNOGU5XTgfdMK+s5MTNEKBCqwkiw7DZ7"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190821074558_1566373740184_0.5185498702128379"},"_hasShrinkwrap":false},"5.0.0-no-from.20190821075021":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190821075021","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"906bb6b9055e0d5528e2a55ae208c5598f19d232","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190821075021","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-lnydWrAHWGl62HydR76WlZjINTnkHmWHyn373iqUuh8yCPqh3GjnhvSJ7LYC15tsQFHWeE+VCzZuwAOiFFuQrA==","shasum":"0141e3fdaf8ad3e51017d9e8e401c3853adbde83","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190821075021.tgz","fileCount":110,"unpackedSize":2050030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXPhUCRA9TVsSAnZWagAA518QAKAicQZjHsrkz4gkU3GF\nLw0vnJRozV13MEgv5BcbtRbK5ld9mvgq6oJnGY8BDJyZqKt1Zd94ZQCnSgq7\nGgCgBkHSdDfAjeA7KGIumNou6cgda0V8aGYyPqP3hOjC4lPu3lJsqhE0QAyp\ny4QPiGS2PnmfLLlGRT2Kq4yQxxuKyVk/1pUpO8GiWMN0fuNVOH1XMG7ujMBi\n/qtw3OUZbw6gU6gFDB3yJe3+yq88qte80Qnh4fzW26VUUAE3rUeQi8MoDNgz\nXI3ZWCkfcf/41+jZYBg4YUfd5WSYPLjK+5nzL0q5fXTmEAYZ/2rPJZn8A+E8\nkVfRt+9y8hTmA4mI7YyeA4jSaJRmgqxX9gYR2NbQudaDdQphKsuFgnKXwFO1\nE8WRLQOMR9bCZvm+6HvR/MHIG2uIqiAY/Jj3ZR8pwOagL/qOfJoAQ2NVI7nJ\nIXNGTW2vhKqEoxy2SFoZqwfKA5LOhjJae/8/wKi0guEmKyZZRRjtArPkku/2\n+MSvC9J10PpMUeEqz3NWSpX2igcm0NGQu+1HUVlUd25/U+IKFluO3rNTZ90F\ngMaYNlE31QuV++oKIG8RlC+LUDlYod/wCtiHkL9d0RsQQtRs5oS9H3qhOda6\nYD6Ro7/MoOkGs2qawMmCw8MwF+mlbP3ZiGSAgKFDPXeI3JBnf4VTEV8gLGRo\nE16A\r\n=NmZE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7zQVwUvxzt/jlbuneh+W6fFw4TI0lFD3jPJp2NGxx5QIhAPLxsUnBX8HVtHbxmThm4GMFEkrM1Z5sgx/hOGgYWQhy"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190821075021_1566373972130_0.38043723243616867"},"_hasShrinkwrap":false},"5.0.0-no-from.20190821095808":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190821095808","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"152998490138255a17a168d5e01a75120b29fe83","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190821095808","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EzOmI9wicATk15J/amAwN1lKTagRQmzC2eg+xfEVqMnwj/Q0jtb8583FNVAezEBK30m1HIKncej/X5XgrvMmhQ==","shasum":"d82c5d1b1ec088130c184e6876808e9f36f157a2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190821095808.tgz","fileCount":110,"unpackedSize":2049672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXRZJCRA9TVsSAnZWagAA7iIP/1EkPA45VftzAIJQNr4u\nXJFEemO5gAoKnFx5cj8myqMyEj7QEJnHXluHhAfMcYnGIfKZGbnQw59TulIM\nytsqiX/wUMRAJDpoqXQn6GuWg6/N7YxOrCgGcfSvB5kFlnMhRHxrYya6M6Mn\nDWZ+ckPvV6Db1KLemV1On+XYKuaIN/5dWM8GArm1nUycayxt/GU4EL1E2RuC\n9lUCTGOYV2oN3In4pyd8nrljSzK1Gg/MoDNxnJz/JKs+eEW51LyK/E6bl7EZ\nxpEasThbk/Kc1aHJNHUW1MZLO6sHxI5anBDiU4yS0dlDzXZ3WgmMsW5RKqGI\nMAnaQ6Ti2jU9yseDRiv3G4+ZwSjvBruaa3KBmsgFRwyBZWvhjrObsaP0Uuil\n7yV+nvdDocCaTaNusd0eVk1p1QqjYxhoVBJ2+OR03RJ4QiYNx6TErKUYKGDI\nWauH0yeG6F6lE2+ajckEJVpZYL41JPWvxFtKMj3vw4vXnjBYAcztQRHCZVkO\n9FLABw8SFLqyj6KDzguxb5oSwGOw0jPK2MuUTs7YOhT9S9+ln0uoCffCx6GU\nxl19rjGjFxiQrk0pvkYlEaiWb5sVvbwS8ZTALoFMIPJX34jrij6o25TAYO+3\nXzIjQan3TmXRtFc9XSd6xAr2tpKauMFLu+DfYjcA/4ZU+QTN1Pr1qrIwBGbZ\n9/kV\r\n=7F0B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF8FJljRrbgQLvztJKoWIFRWNZiOdQj4EQQCNqKsJI32AiEAuDNoFccBtZbS3R5yDk2Z/jbwGa+bdiIfCzQDCY9ofVg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190821095808_1566381641113_0.4296041547044238"},"_hasShrinkwrap":false},"5.0.0-no-from.20190821100018":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190821100018","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"152998490138255a17a168d5e01a75120b29fe83","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190821100018","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qImdbGH7Juqioptoh6430F/OWr5fqGAvojovf8o4jJq7EE4jv3f2lZ9l5tRi0Bfnk3MpeNUIGTVIlJPIsb+eTw==","shasum":"5cb5472e842c837c3220440faca2d61fd072cba0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190821100018.tgz","fileCount":110,"unpackedSize":2049672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXRbLCRA9TVsSAnZWagAAIhEP/0nrhEATXGD4SK9nI28U\n71S0RM2SLz3JPjNiEq0gmvB6XEv+x/ypZJa6+guH+Owo/6A9KBEECPsOgjrl\ngigvwAZGPqLbUNcTd6/SwFkFikkpWHS7pigymI/KilKJqnwcATCXmMVSpk7q\nYi0W+aBohFXoUj7Ha0lamGfoNfKCGasXQ4cBN18fnDcu3UPmDrUWCQx1ZvNQ\nozpmrYG1ZwyktXjZ+MyHXCtF+RafL2tLV1xOM7Bz6UEv/jGU45E9hJMDpIJY\nJ6HiXTlMvUBcyGbnE5+BPdY4za2VBlYrx8NlvojCT8tB+tA+npO9FOaFzotJ\nam37J3k1V+lqk87devNwPupKyZn9AuqCMo+snIc8sTBQ05DN4k50UXbmJ4f/\ntb87s6uEViaWjntKEt9tb4qsNITmwXI95Qh3vjQ33XDU9C9c7NOoDRF6Utp+\nZ+7ed2u4Dzd+ZL2bwmQ4NilMzCoD6hRUjO+ywTGakkPswxihutp7MBRvKV4m\nca/Me2CXUtC2uiLIMipqWbZ1i1fqNWZDUkpT55QaO1Yz140C6AvoGOkf31Bn\nHZiseOGkugXpbMAJIqQX0qpLku64Ij4NulxTrbPGxX738TIzGMDII/uN4Z6d\nhY5ZgZvUgooqebRm9k+CvmqA1C8uhFIFHO30Pt7NH6pcLZggylGP/FOlblQW\n73Pc\r\n=lmfS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDou2pzyvrkUCJgjK1UzxOzdDz6EgkrzHtlnFKOaoPuawIhAPZ9idHVWrU9e40Ehf2iyK3v5N1ZeO/RhIIKtiPJn4my"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190821100018_1566381771288_0.48341572024050583"},"_hasShrinkwrap":false},"5.0.0-no-from.20190821100628":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-no-from.20190821100628","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d2afe1c855c8ed099948b8c2420646a711348914","_id":"@atomist/sdm-pack-fingerprints@5.0.0-no-from.20190821100628","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7GUnYHSqeDCoXeDKDdzMPWM//HCe082n+PWJGzmECZclrMqjnNpLOL9+ksYuK3d8pi/55mFlrjfEiAPzqmtygQ==","shasum":"88bf461895149552dc20870f45925d432c473cde","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-no-from.20190821100628.tgz","fileCount":110,"unpackedSize":2049722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXRg3CRA9TVsSAnZWagAAYrkQAJ+N+XLh03rfRswMLaOB\n/RN4hJxxGdcpaGIJHW1ZAP/Uo0NamVyz343eifCkvVlfRs//J87CejMD7Orq\nLNnrGWgIMyhDxykXfc2psYiDgP43TKWYFFJh76srRYy6BrSgZOt/b+egiqjc\nuyderu9d7HTwVvx3fIplzXvGZl31FDmZgmQdBZg7ZlGpSQy7pxjwM5GTnkHz\n+s5KyI49Q65j1xk2YjEbWK1w4SslcUvahz3j+oGO9GK5+CMcTZ4y5q6anOfF\nGU4ldbgRLcqPkRewdU9EAUdqlhIjMLRLIS36txxI++d58vqk1HlPzx0fUZMk\nP6v+3evaTVCP+xfkf9IU02GtLFt9iQDurgunYilBV+Ou2621AeTyH/0Cv746\nUUww9W0qen032O/sHU6xq3O6eUxrTi2GuGg0ee6XCq1M236thcxuhcOf/nPt\nk/ev35nn/hohka4oPU51CaLpJ+lvg5oT03PgHit8NiWs1bdklCjgGIltiDLt\nhIuVTa3geO+XJXyFM9YMLb3C3gg0SBJbqyIexin+1r/Ct1uyHatpY6BCS1G+\nPVrqzosCHsuAwUMMy41fpzarbJhnK06Tysu55eujTN5ForQFoek8RpzEYSSG\ngmNbPJ/jzwiXuzNV7uGU2GCT7YWTnQWJ8iJuv10hPqdkCr/DilgiWuwm02go\ni4WB\r\n=wQJ9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFUObRj356OcucadcFprhNpKd9HrltLSDPfZalSMvz/eAiBo0Ztg2OHTuZ+DaVKKR0Alf+3qcD3DQojyVVHta2Ny+g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-no-from.20190821100628_1566382134624_0.3362956012893781"},"_hasShrinkwrap":false},"5.0.0-master.20190821102112":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821102112","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"380fa84633de857e53b95433ab5c88a5ca612c01","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821102112","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2HDbgnFlWKmBGHSI0FtLthkhtzw1OhijH4o5vFYeXO1wfCYdBB2e/dTU1O8Gtk/jXiWb6aa6xdkawHQ8BuZwcw==","shasum":"3c1f7f933f3970b66313050d79f52faecec52dbf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821102112.tgz","fileCount":110,"unpackedSize":2049960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXRujCRA9TVsSAnZWagAANUEP/Rf004qXPGFgiOp/HOZ2\n8IcwMPEgTk+cmNulkOFwqH0BnoFB3kSYGxxQvAia/O/slhk8QgOVms4jTe/e\nOtx6Nj0KbhOSwrvumfTbjROazA/CfSskwRLc9IuB332NSop6N25r6jFKISqB\nn3CFJ8vo/4SjMTb+d+hhUrUHeByJjgxIOs/2rBif0MvwLvwptaE/7MC+Usaq\n0grPE60RcXlVG2HMC6R6oJSpLcMPEQ/G8o07y7zLCcJt2m4mhP1kUiMPn21V\nBzWFthxa1AvssR9b4Gf/2CS7BzYw46wtpPdf45FuOzZpN+r/IsvOx8ruzgYV\nNOS3kllodvWfpB/JH4X+CS3imjx/BNllxaG3l3LmBaNjC+bew6jL8Y6fRgpK\nRguwn45KrSyLFPjmbZ0BKVYk1sEA8K+LBPTXcnFlIsL1j6fyOSbFoAbybSoC\nmRe7Wl+vMdW/6McQcoO3PJDtObe9TYGrQwY3+9zSxSjQpNEV5La4W/xECBdF\nX7Rl/Wg7+Yf7rqtrVgRTvbDQ5pZC4a2cSf867tjae77JqJKQxicb65InPhRl\n/OU65sEhpGiivEi62kcoodGiP6QkjWAgYt6dchRbRIUFslTRvtZ/tkqkILRz\ngOr3nblmfE3D46hGKS80IeSHR3JMahM5OfAfzFUZ8Zqjz8O7yhB58iushDu9\ndx2E\r\n=7XvT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9/Ygw7R41+6x6FUXCyqj2605/POUyg5/CUgys0BeP0AIgJMYVTcQY8ndW2GX4ROKFlJzhOmSz6acpxTwdh7hd9Fk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821102112_1566383010587_0.07162148714497785"},"_hasShrinkwrap":false},"5.0.0-master.20190821102259":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821102259","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"380fa84633de857e53b95433ab5c88a5ca612c01","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821102259","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0+K/6LuOKGT7EP/B/zxKBXcj3dURIjlqjhGfuvTGJgm9bnslxtzrLDcpxawPUV3zgCMYhsMKwf9SW3aspd5P9w==","shasum":"9e7547a1ece40f272257c4b806d3836785b3a7b9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821102259.tgz","fileCount":110,"unpackedSize":2049960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXRw/CRA9TVsSAnZWagAAfWUP/RfGkgOZvEvkO2gfgG5g\nni/yDGilnGiJWn6y7f68FLAZP2pQZ2CwQAFygDjxGDD3OegZHOwhqXICyx+H\ndeaMmUSbJycHDg4vAx1k4qRLdGR64s6Equ7E7eoxgaB+677y9V6f7yfPTe+x\nIUi2ucWduOdmJJdQvkC7213H1lzSC1wCuQpKCNQa3WeCrgLNNSsNfmbMcfUy\n0pgWszS2H2Kz1vYmwaF+BZHN8aAxtwOZOWEuEVy+hOM6q0Qympcstz8QMtaA\nycbf1Q/YULaaIbvOWumC3bZQXIwhjlb9QBgvi+LZye1R0Al1ewYYvALJ6LBl\nJAPAAH4s+0m2oRWIc4dgazG305WUukrwwrdAn17OYBRlQhDbuO4vGATbtjqd\nOmpdO+RbaROQHvIVNwaNBgbIK1zl+B+/Q+pyUjPMdphnBMYhidt7LsCUPt7E\n8UzVSipR36z7/CusaihO41gdftXUv66elXhmvDC0qaB5CpoTLcMgaZP12m4R\nVmz6hkCANwoUqIn8WvzAz5ueeXZGQe4vRnKpw2WYC/WPYbmrq3ceuqEJlwrB\n5EE0EQx0BG0EfNWpZ25wcnZXN2iaCZURQiIjBfcCWqcUoqnM/10+R/jbefIy\n+bjriZRfV0jmPPjsmUXHzWdGJl4dyw+syWrFebK5UpeA7zRVMvHFHJh0kVsj\nI7cB\r\n=NGy6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpIPeWK1UTkBS05atuFCWDwA1iCrK6RqmWd8UL7E9O6gIhAJ47vbDM9WzIIgv0flQhd6Y0keDn12reWPTEzFjn7LKA"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821102259_1566383167020_0.4989908796754059"},"_hasShrinkwrap":false},"5.0.0-master.20190821160940":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821160940","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5d2bf3482d8f18294630823a299f1ddaeb775ad6","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821160940","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YwrghpwFPjR/WWuzb1s4wtn8qBbS8GxHtOv1OjZwkSuazrK0F9sfnhMl8I9h2f9imO2P90ttu+OjIz4XNMN6vQ==","shasum":"7361038243f773a3d735b660f309fdc4bd005810","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821160940.tgz","fileCount":113,"unpackedSize":2118355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXW10CRA9TVsSAnZWagAA4M8P/jIiuX8qDc/G2Nokes0u\nLZ7gak921oWgv2aDT9719tRsP9OQCwaeMkTHCrYhB8onw/8A4k5O0/8zD5ub\n8U9bStImNPAC1vPw4qwm3A4ZmmhC9SFCWB+G5WdiALUYzItY/YM1vENWzukv\njBiQgKq2r8dOfcJ7kJg0pkYaj1mHU2zQdztrIB/e53pQZt/Rbj96++A4Xalx\nwJFrm46xa1cq1qrGuNonTKFZCMk7vnO8nbcAsm9ukk27Oje+YjayWLkD4NHu\nbY4YtO10g/8H49OsayITz4kXuaq4nhIEMru0vV/okSjJNRoDFWCqw3Ybj1gF\nVemrInzjGJHU7klxqeLzD3Y37gz7sVbwc4UonZaJB8atZMjFapxUXaW0A6Ll\nAnPH1jyoT2DmYkVb89CuLGk6YmuoeryT0XVpLyn3jjdSDTLGmN7m9WiPZzY1\nFcdJsEkk0R2TLWokqilA+YR2HWVTj4uKqD44khBhdN+0oi6SW94+ioLtsfSJ\nd1f9yl2fiC95H2krzt9bRGv1jiuynnv0cSqdhdUe0Rqlm+AAPx+H9l7+C2gM\nDayDI82CUFycXr9BNeEUlVFJbafhvhYHmING0gk8+8YEhWdOK0ryhVSx7Fgd\nClgqleIubW9Lnn7GuxJO2NVfZFAL35EyYzFXO8SKkxxxGy6qgOHQHVRYWhzn\nhwH+\r\n=ihSM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7HB5/I4UEoIp58ZQCYNHjtczHaQhNo3dmju2Bv4AzfAiEA2h8ETq9YHbXfvU8udV7o2hrWhwBiaW6j7/N69du8q/g="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821160940_1566403955729_0.4159878100802752"},"_hasShrinkwrap":false},"5.0.0-master.20190821164939":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821164939","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"053f776693382320c5778537e14a9255a7dd6c0e","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821164939","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-M3daQw/gQlN8eBxiNO08NU4ehGaGsI33XS/uVFPthFBpegW1Tf3emPtyYA0RrTswFpX8cvY4zJ88fEvF3aCx0g==","shasum":"4d2d43c6c3e06f65a85a03b2c2f6a510a13253e6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821164939.tgz","fileCount":113,"unpackedSize":2118449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXXauCRA9TVsSAnZWagAAit8QAKGelVj/tCrTp6UyNSoy\ntPoHlmbsNPzYpL96CyyHJrdxNxgqPkx3SRUukoSJtgVuo9HKe+ydZL4GrSK9\nIz/poGLI9mgkIIi8K9LPv1PhW+ztJL3Zv0n/FsVH4RHjwk392jRaheh1HTGc\nCxSlTcxvPUzHKx6mBAvIOD7LA9T+QfMgCDshrtgON2DhQbXFBNZkI6HrSZHZ\nTIxslQ/2josNnMLx1rGc6B0E8McYd4m4pyGW1w+lE5Tew40s8SYQuKH2/VMX\naBVgNOq/96bte421EXz/ov/Uw03mJGrKfWU+BtTgNUXM05ToP5iY0dnyZJY9\nfCxZLxka9z+KAwGL5u/mKLIiWD7eYyIP14O7BIiDv7oPaCr9Tu4m9AA2tKgP\nLLbdA8YfGLIhq/RsShmLIDJyFZNbQg8zhRuA7UzsDVzWeisKrKzsK3MT+nqM\nnqwF8+2tH3v5+7lolEeJR0DAUj8/jpBn/Co/9SHVPWAKOsMskbBEatQX95zO\n/TmzO8iBgz+Tfu3v152vsAsqPLe5bDXix5B4tKYQvzAWUBrDfnTwg39D/kjB\nWAS6rx/l71UBIJwuq/SnEkq2XheGsKjQNH2atfSdmPHZqmM02WSy2jspCQRP\nB8fWOBQAqfj4hH7Idzws207/9/ICxnOjPUnvCKj5/kxF7O6gtdIaXzjoEljW\nTA1I\r\n=DfA5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXkz0i8hT3UvbDFpMqkHfAvzO6mGC+QIX2oPJmiYQ17wIhAPCfS9hatY7BWvGtk3wPPYah8JEAUAwS8T/xAD1JlAII"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821164939_1566406318074_0.8978083543453212"},"_hasShrinkwrap":false},"5.0.0-master.20190821165959":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821165959","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f0944d972f6cc853c256d91a580d8ab52e5f8916","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821165959","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IibPv9lZJPvii1yTY6lw0NP0a2vzJNtJoLez9VjEVLu4WIavMgPH7fN/q34hsBcA9HT4aAMk0ICE/PX7RaoEcw==","shasum":"f810fe163b94c2f16feeffa8d51b9947d2dfeffb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821165959.tgz","fileCount":113,"unpackedSize":2121446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXXkZCRA9TVsSAnZWagAAgkIP/0Gaq+wCm20+T1xuNjKH\nUlG+2Dh2M7sM+KmcKNKjf+GU1bf96piy8Vmo1R5274vHi64PS0dgymLyY8X1\nJTofZPzlJjOZbcN/hdIzKAj3vU+y7DSSZcGTVqHnBAW04c5Gu+sKrvLwKQMx\ncuEYa8+kKKxtlaD26dInOYIb+xZ1hRVOD1/dH5ZrIStDyCScG8dmikYWWKhU\nY30MXyA7doXcZkcmUfIlqiRKHG5nYBb2c+FadcjBdeuMRqbm4MmfLEGz7H8+\n3VIuiZYPuESd2tpnqoIiFMB40PdXIHaNcEmiWrtZcUjmY+0A4ye7rBxTBMu0\ncWAscx53AO73dicYujSqYESLUmxDc7acY9jOnUaXLfr49I+pNIje5ArijFGa\nXZEbFqUhZmvSilFi/ni4hVsfNjmFspP4l5caSFSiouk/08b3cjPaaV21ViJk\nNZdqLKB+DkYEBIRlJ3bDsRFak/cSEWN2Rp+SLNYi6Sdd7Vu5UuA13CSYZpwT\nG2nTkxdTFIBenpVkBnvEotCPxe9YCCLhwNWSkyy7++MzZQPmYItT1jou3H54\n7TOMrgBil5fKb30vtC2R9E7zRFMKTTj9HQjys/QaCJVlEnkGr5hVz7DC4PzT\nJNWn/buLHftiD6TJ65p241KEMb20g5KJ3wlc6gFQXpsGZDK2BHckhPVOMuuh\nr4c2\r\n=svCv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ+z0oQf1ggXjRuP+Rb5cNCjuQJZaT5r8lNxLctbbCWAIgU1CLZUZLjbSedkzH3eKbedIwOf5HDjt3fiZeVa4V+Q8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821165959_1566406936577_0.9671025798123265"},"_hasShrinkwrap":false},"5.0.0-master.20190821171625":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821171625","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3a27520c451faa63a778c452abdc20a71ad4fc49","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821171625","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-j3S5IrAT6Nbma9yDHZwfzexLdRO7mznGZf8nONkTBaFgcB2ZgNFYxc+iF9HigaHuYFrDDTo0vxPtrO+lYplb8Q==","shasum":"643d3a70f248589c9cd9e02fdac018e99fb06a52","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821171625.tgz","fileCount":113,"unpackedSize":2120895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXXz6CRA9TVsSAnZWagAAG4sP/A1IQN1r7YgECowoMU0T\nPewYayY/65G5zdjENRFTL8PiunmI6MnUpd7lJubtBKbUvSKyPrSvKfaobhdX\nNvMXZUI6kcChAuq3x9qcK6KCUAmitPfFhgfbBfjGt4f4zcE7EK1JcL5M5kP7\ntxfk9e/SG77e9LAGfut69SYK1GT3HwFPeCUGePdjaxqCnRPBM0X8lopH45ya\nwp7eW/bb/Ma/aixwdjjcoLfOmb5oFJphrnSB3EXKjPW/vv+OI2EAqfDNIC9B\nGw2VART7wddvK/rw9jzHfAOm68gEmnIxQZ5FDlCtIj047axihgGXUxhQ8rz6\nJeCYPgaxThzDYhvWmjuIwZCdrq7yumu/ttG07z6b8r0dbA4P3ulozxQSxf1O\njHYog360Se4mdqGjUAOrKjfVOEqhzxlcFWS1RJtTASKNKQVggFHj4I7Xb1fo\nhlZzjrSyOvaVwAdJGsZ8xvQ+cJ13gwj/IaysCqkgkdHILzo0Y65Qku8J1Ps8\nFSND9UPlSlccCgMhoj78/agqwM8Tp73PJeihx0b0yvENG8p+t60D3kBsWo5l\nVXmZ9JRt44NbWo5l0OdeM70vCP67vndF6WW23NoE2N2JVm8v0JNWHxcNrk0k\noEBE3BcEdGH16hMLMFQcWx+rbB/Nd53alDgSBOJLcGBfHg923CqmSXQbWVt+\n48Ps\r\n=aG0N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAdFqyRH56orZXSoOGY6Y9TE+ymxcWo5TAA/vjofMW7fAiEAnVIzHjnnYEmvPtC/IpVgUMxlmVJSb5k/BFgETfqtIgw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821171625_1566407930124_0.46178585715829"},"_hasShrinkwrap":false},"5.0.0-master.20190821201638":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190821201638","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"356a911e2d6e16edd72494943caf51271be10f5e","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190821201638","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PZnqSJh9kIbeqgy2EqrCSTVj+p8WDnDrPIcFffyEMDopROIZl6siHlJlSmNsjgzlPndVPEOV3bEWE7Dta5Cigw==","shasum":"0c382e48dcc4f944be30fc97e7150f8a899d44d5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190821201638.tgz","fileCount":113,"unpackedSize":2121095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXacpCRA9TVsSAnZWagAAg9UQAI0AMP4N+dN0XumW++Hq\nJ1t+fHxFQjttt3vJs+JWVZicV9aLEM2Hl6cyC8v6OnZcu1/4EeHFYPtwel8j\namaRR7w3ClnksxA2ekCRet4LqCMMwTmjpd7CHklLOcM+oEEzicshKBb7teYd\n+15yhRczEV7CGq6rgmGNUAfn6CFPCld3pZfMUDGQeuVMtqZf5aXPYDPSVTOP\nGLQxNpPq6nrTiI5jYyFBN3N9MsKmlN/0JjaN5oSYC/fgoGUYFKNwdpCLRyOZ\nGDVf/QLeLEv48xSbF3jYpYErOBUqsDlMPl0/ay3LsGutElnHUptGXuvOI8Vv\nuucqllWyduINKnC0Ibh/NsrX/TfMFpoNKgtCN7Gl3TjNeRfgoALFA1K9ht95\nJhoe8dnsUvOu4j7pNrcJdHNf0i8zEJkMuoHoVTJc1E/DkHd3oUTaEj5q6vfZ\nwOZrhB31JkeILp9PMMtbreYbeElk7r5LXpPTKSFHW0j7dXnQ3z2xZR50kRi0\n5x/5S7ENC0BsgnP0IfF7abfR76iI7d5QmCndImTJmVk2AKNfCTgcWWkPV4ME\nWB0DDOZzMQxRoG7qq9vCNpIUESH4F7H4x9JYBNxR0XrRWpqqdtApFQ/Ap3d6\nJ5ch+mejWpDlpPUAD9QMKxX89AqiZkiIWca/tmCWqFqP+R4LUZEeLbuzJpdc\nBAPR\r\n=ORcE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdkde6uAxz518tuqnsZUmM2d8hd4Meei2jm9kLSphPmAiBLYAPgtHJNtVJ+GwV/wBKO0TwVNyD1AT11wq2449R0kg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190821201638_1566418728815_0.7751393252407821"},"_hasShrinkwrap":false},"5.0.0-update-runner.20190821211112":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-update-runner.20190821211112","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8c3ea4cf7f9703425d86cd604ba6366eb3190def","_id":"@atomist/sdm-pack-fingerprints@5.0.0-update-runner.20190821211112","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-zWtLAkHbSkt6yuOcrzStq4Nyew8O0Am6RXDUoqB1J4rsg6DB3zSaLcoetCZ4u5V/UtjRxNOfVmRyAJe8CQN8TQ==","shasum":"fb3a8bda1624e478a9c3abd20e48cf9246a3a0ac","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-update-runner.20190821211112.tgz","fileCount":113,"unpackedSize":2121841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXbQcCRA9TVsSAnZWagAASo8P/2JncBvsmX/d+p8sGiey\nRhdDkkuLX71FkBvypFD4JD+qkPkoefJqYt9dKX+vwIEh9kffNH7IpXMreVdM\nFvroTRXiFO2Mk4c6pY3M5907dK7HGu3/DvLfGhODcHf0qHAzZ6KfiYfwSthg\nDQztEoiKryBNRyerCFCdzPuJcS75MN2oELmNtJAq8I1rZBpWP55iNuuvx+41\n6PRhko/OKmAmrnS90/uuJFgAsaJA74X5zMXQnn7V0UbtyMyt01XwtA2CBWaj\nS2/JouqM+cy/9caVU3TpU3G+6uSfcHY/TeEvVgyrmmyb6tHS9C7UpVc5IqwW\noA9U9liSmZlzXZwkbgWJAfcLihJZfpKOXXU3ZLl2BI4EPx4CwOdIbkqZDu0p\nvlHloAxrHgMIJdrcarvDgAG0hGR7FvueqkKXf6/h2TgHXrFcP5nocu/Tjvd7\nIHBWrCC1AyvOI5neTAXJTfJOYVBIXgi3iFkWtTLp8AK3E3qQQwzXQB1KlYbm\n5bYEtJGmu/d2VafKrm7b5WLA161pAyluPiX+AbzoefP3Kp8bX0tBv6HD0V1J\nGTJEphkKp7a4H1dIkumLLX2+Qu8O8e+/1R0STzcMKEMcmbJlD9vFBIuJLJbM\nRmROFHwroGg/Jh2uPjxa2/Y8rGEdlzy7UtjW221GMVwCzV+32eIBmpdC8xzH\nwlOa\r\n=CB3a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBaKHBR7HOtOr/sE3eMy9IoQ6l7+2e23u5R1NT2yDnswIgfGv4pd+RvCnWU9965B3mRb4ZsKSvnz7xlT9fG22YYVg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-update-runner.20190821211112_1566422044002_0.013852676251026486"},"_hasShrinkwrap":false},"5.0.0-master.20190822000651":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822000651","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"330fea17622e6e7b2051146b799d8862e533df21","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822000651","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-t3WdACyGm97Yv0wAtTlYSxaQF7cb8CbgJSj8P2iR8g8tIjej00TTMeniKaUFtbCPkuSRxhQ9jfK/3j4ZCpS6+Q==","shasum":"1d752255f97eaf46bdbcebee8bb0a569609a8e3d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822000651.tgz","fileCount":113,"unpackedSize":2121088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXd05CRA9TVsSAnZWagAAJ38QAJ0JTm1jPFXoyYmDBsAW\npLk6ZZqsKbOkK1WiigYmk8tsCTOimXuPDtipTUsHVhxwI3/Fx/U5HX+CjFf3\njVbB/cYS4bDFjVa3pCC9UjvB3jskldtmFMNpxsprP/OrAusfqbJOckpe257g\neAjeTRl6MSdBuTi6msDJcSSZ/B35LYSJLjzhVAEduapsGR72ETNJI3ldzejG\nUUc+r+NZlSZArSO6439RDD7qBlXk7MmI2m6ApYPDXVZEYzhQ4ubuztSDg8t2\nvLsOjYA9NuJiXWECjIctKduPo9Aw+s2OdxD6uYk75vcPXdt3J1M0FJNCvBV/\n8QkErqBXFlsfTykkcXSjfOmZy8E1kdquMHYz2EJTIpi1+RGwloQ/ViYG5dUM\nwZZPKShhNKTg5lTJ7MGJ4+LksVlliwaBSB2umcFtBk4xaYA4JpG0neKGmDC2\nEfubw5nr+N2u2OphGRrGbhvel4+XavPb4AXIHH8uzWW10i2oMJzMYRBeaDSF\n+KhGMNgjYGmLdC1n4zZMhst/10DovKmBL/qnGwe6v9Maerjf6L/WvZsSBid6\nXplsyUJW8QxNok4naWxbwleIswWin5kA1rR0YqkEMGWxie2+nwKiqHtRv68V\nguMKtGm1N5emvLmBFVXxHmI1iOPYYiXtf0vsaqF4YfLrb6iyAFn8m1LsRenv\n36WD\r\n=1zfx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDoDHoZa5xyMilkjJvA3x0wO2tkZs9uunzAVjbeBMeU8AiEAwZK9YpykGcKZLfEqOHsXlOHSvJHPY911S7xPtbo11hs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822000651_1566432569126_0.37923633684739944"},"_hasShrinkwrap":false},"5.0.0-master.20190822065338":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822065338","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"13443235370ea6ab3d392559217c27ad30aa8484","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822065338","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1uQXkvkLZUrD4z1AcwTldnq7czL5m4c3K8wfNCA3pq9Sa+8H61U2lxg+h+VmPFVDLTlUuGyIAveulRgPOoTcFw==","shasum":"412ce89cfc402e2c6c3184216738ef477f90c41f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822065338.tgz","fileCount":113,"unpackedSize":2122335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXjywCRA9TVsSAnZWagAAG20P/REVZK5eg/ggd9GAS8Wn\nuhx/EvDGinOK8VmGOz69vYZU33hSI8SNXbWOp/BzX0TQID52TlwhDHR36Wev\n+E1B3vSiI2gYB6I664eqi/O55PuI93gc2p21y/EXKuFYBHbwdzbbARvJ8ZDQ\nkM+8prkiUzmAXi1VoHxHO8wVs/7oaEzsPRTY1Ee4v25Rz5X0TGnVAerd1tj7\n5RytlyKSiltxitUMHmfD+XBw3SaXwypXYc4skWAdb0JOSTqOk5KTb1LNALqO\nrw+6dl8pDFiIYTuaSV5hl0KOrOk4JemdVTrLM55kkNhjQwXPWsWsEq/rPdAP\nsOfpKtiQ8FWvhVzw1CynnBj2Bh9HDLgIvTzn1Pmy2cZztt7EKoC/be54DXvA\nA97dhj8vt0bEHyw26dDdGG75jvo+cNrOJ3wJkICC8U1nR1s6OlEHYacFPuoz\nIIPSaoxNjmA6HxiI7e1zW3nV5Som6eWQwMKgh9sC6ltwcdL2E0Su61gmFZzF\nxbOP5N3428MrY/iAIHeOh0kcalEBk/w3jx9cFrnr0xZR+PKQsEwToFF+Csvy\ntf9UWFjTJUbpuNokDGbjK5zpRIWwDEEVUZX3VTWOZDCmUh+zIZLr+xA530hw\nyRdHZVB5wACRceq0mlF0wmyBA9aXA8mCe2GdSlk+X/Tc7Z3kXx+8CwP8fEUh\nlNvO\r\n=yYd2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHK4wNh89IJ9DyLI7nHLdECZY4KvAN0w5JFRFERzWb5wAiAXl+Dg9dRLW1luKXkJO0a25Xcjpv6fSf6AmXCzWM+09A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822065338_1566457007157_0.5863180106552208"},"_hasShrinkwrap":false},"5.0.0-master.20190822065724":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822065724","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1c2b1b41035f5ddff67b74e2de51bdeadc841027","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822065724","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FKlyng8oJAm3rfGxs9vHw97gGk2Kyktrl4OmCbTXSNjgSf1WcAPKa4x+1NSfNWbpoJVw+10M0WUW8MJorBV50g==","shasum":"e7956649bf3dec7a490d3afbffda19c32c3d3a8d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822065724.tgz","fileCount":113,"unpackedSize":2122393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXj2UCRA9TVsSAnZWagAA9nQP/2/9Kui5t2nRQnzVljp6\n0OT2KhAe4EbDk7baqZjW3HhdgHV94BBsRyCsfCnVW85dWRBiwCSOUzqQGVes\nfngvS2nOSJkSS0YBDsexgxEz7eoC7TkLiJL7LSik6B14hEOFnKWqNLgXk05K\nIJ/zn+aYyYiBTcReX+05/2qaNtwZYa+p+xvhXj8w38cNkyBbYnaDoZ2nP6PM\nulB/SR9nxFFRQUjEAz4JutWT1FAFdhjoD/mqmoQ7gJ+St0mvp2CfjVZ6g4k0\n1RnU6kRSQ3DqMa2/fAuElwYW4arfAvjoRDFDVcstNgkEJ+RmFwuKNJoZEyfW\nc/0UuYpXj6LnXMpjgx1v/wwoXNNVVbWILSq0rdhCqVSwIS6Gjo83/5ETx08M\nQdaKRTttTuWiBKaeqOnewWLYTZdQuq0ho1S5YFvWq52Sl1FsBevX+QPtF2Nk\n8cmm4vJLtRPpmvf9cC+cnXtEmL/0a131DXV/GYMkLyOCiTcjFwsiIRlOfwhL\nmZ5MkBFrZ11bV+3fanTqIdpO4clC/N7IQvEnszke4yO/F59HErkwpotqJFgv\nbBkY6p5QRR5jZJBxAvH/vMrLyVJA+AANqJlFho7AbYm3oqyFxoNgXbEtpcIU\nTx3QToRA4zzMEC3yoKltQt9IKnSsE6G13wHQ85U8nq93Dd6XNhR+k2wYo1+U\nZdeu\r\n=zRqp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2u8LkhEbc3OSTFA09/hdvaTbX/LKGnGRmCCDYlt+3CAIhALug4wWZT/w+o20BspMEWMSg/LfEnSv6xNLG4zI2TKjH"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822065724_1566457235813_0.4251230470806695"},"_hasShrinkwrap":false},"5.0.0-master.20190822082751":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822082751","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f82f465ed19fc959d4a0e73bb23e05b632dd7c3d","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822082751","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-PapY/llCOPneALDSXzk7qB20m0LLNVtO+zHerAapI22bZjwnayg/SGsCNsj1CEec2Lf7K/QHYO5ulLrTY1Fzxw==","shasum":"14d1989a34b78d2c5e0e29048b7d586188ed1283","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822082751.tgz","fileCount":113,"unpackedSize":2122462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXlKACRA9TVsSAnZWagAAtNkQAItdQMFST8CK7ymgKUeg\nSRiPXFaHpPRAdDUdLjvQerWxq2cUSs4oibY+nk411PeKzqzjr18Eiqo7fWt4\nDMOjgS+Q9dstywYKVbCA+c++0WlWEVZmIf8NtQM6lZQJYY8aqR7fGoHVqjwh\nv8+ox4tkAJVdwpJs9tBnA/IAhC55Z0UpaJdewg6lz6ECl+l0zYvfmDfYja0A\nDksx4vYihAyAOI6/ATyk4rMr9Q6kL+JIASRS/Nca8qPTUAvUmQvtYKA4OD4w\ndwzCestfn9H7UQRVuG/Cw39LqXJ9hI0V599TihJzjMxyrJNy2fJNaZWjd8kk\nJ32xsRSs2XOlIkTLxAss/mO6MXtRgUUQ5ngnRPr62tgS+UPezZUX8TRPUBES\n5d1vax76KbbMUY06ctXzq83PvxF/fahivpGyOd64inZr6qT1FxMrakOo3X9E\nZozGb7pPB58ZkHpnPr/0CCgbxzMSSYNRbDQovJXWOXLzJNz3X6psFzoZEkKJ\nPnUZur+76dR73T2dw8UcK2YIO4mwWkUV/09JchIgEa3xJhxrPnY+q5ot/KVi\narcj9+D9M78gyFyLrEcw34GBsa/pgSuCLc7ZA0zqChgWnY8LWwIVVKes5Vo9\nDZbz1cZxQ9eSl2wd9dvnOog2O7c11UqGU4h65VSpOUQLzmXvHpBI5/kDTihw\no2kd\r\n=VZW2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1CTZYy3MSf9AAahmUeevdb2rY9AGRqKBo/vSj5jWZwwIgMqFy2NtW/5cYch+cXOsgT8dpliZ2tSk/mKzNy2dFNnA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822082751_1566462591761_0.0018893501598640228"},"_hasShrinkwrap":false},"5.0.0-update-runner.20190822161343":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-update-runner.20190822161343","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"672860487e6c667064f65f444ebc2910cdc62fc8","_id":"@atomist/sdm-pack-fingerprints@5.0.0-update-runner.20190822161343","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-acElLPN/dXkZ/zhlqGQbtj68fcUJLYRohq6BtpIEH3lVXa25vvlrXsFAmVok1fiG5qH2KnLV7nQwOUa37B7LmQ==","shasum":"64c0b7f32de7ded9fd9a77b8342ba0bc81eb2224","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-update-runner.20190822161343.tgz","fileCount":113,"unpackedSize":2123415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXr/pCRA9TVsSAnZWagAAN2YP/1olyRuADoS4fl7Sy7PG\neeFsd6lMXJwMx3yzg0ryigkR++AWOGcfBXETJfDoa3oW5Nf8D2nIXQRz8+rE\nkPZ89H0OWH+9ht5aMw3hU81gri40XV78blc21nydKoZHTwzaM9KmcK2m4R18\nQW+78iA7Gv4MIDwYuv5miykrEsjQa5H3Q6Mazn7pAKaPp2FexK9kRlEE9Uh2\nLYlpPmfgfwJiH51+djDdmoy6Y101rZbrm7308hkeay1pax9tpAje6Fhbc01Z\nPtyveBnORvzaf/zSGj8rBOZCu3j3x7WxojhEq8yvHj9spVJMaF/YtwlG80Vm\ndpte5Tk65Oe6nYCi2uRHOVwUlYunDzpqXyBI7fiCTyKWuiBNh69gNwiqERXm\nAYrIinjl+Z/DCr7pBrH0qU9RjYo/T5ZcFi3WY4Lubtd8uIjwReTuOCjR1gWm\ntod6Oia27GIQ4+W7c3OlwVdzrmRlV9Y+p2kR11a/l2Djkp9vOuvO98Y48MRe\nuOzHbiAerOV5LyQyljabgAaMkIMzTmR7p80knRbZchXmNVFFPaZIpPuIrwFh\n7u1uUE4CJmMhfvADVCqzq6RSreZxJ52pYiBKMbDV9oijL4+6t5WMMkHWlmWf\nauVRvz/ek1/nuJnYWpIT2rlTxrtd+HifHuMGVm6EzcGYaNdk+XUAheGJec6y\nm6mH\r\n=xyEh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJF8ogmLV1MMOcQqor6WJRbKqBjqD0rDN4GX/rXCYAnAIgMQhb8zh+QBlHG+99FVFLiy31dCETL+v0cVgkVf5zITk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-update-runner.20190822161343_1566490601264_0.4443304809260633"},"_hasShrinkwrap":false},"5.0.0-master.20190822162743":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822162743","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7bdd5bbddc3a0f882b7828ad5ed8f24f30fd808a","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822162743","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZwAuUbBd81SsPAsr/Audc7L5Pfa4fVHp6Z2mLdYl/7kG66eNHZ+msPMjnnU7nqUw5QJRQzQG0iXxMTS3RVCAZQ==","shasum":"1a6415610bd927c1baae05ecd34c68ac9c137a1f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822162743.tgz","fileCount":113,"unpackedSize":2123408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXsMUCRA9TVsSAnZWagAAiuQP/0NmWcnvTJ1EY0lZwv+8\nRSGVjSssTV4ulBjgCQskaT1P314aJHs8tV7dBMIolGEIE/aZBM3AFFxwJDKv\n2UPXazd1PnBQajPSErBSz6ZXnAZp5rqVFDowN5Yhb3rfeE6IGzTq3a2+kv58\nu0I9yvyrQyEygmMeyFDnjrrhmH640RAtvYM55iTh4+t4+KvaOtzrV4CHcFJg\nMKvHbZf1u314raBdwQXj2rNLM73TMPjlEE+TJDTzKEZfm+Qdr42AtnCiKm5C\n0h0f0q74v42Xl8Fkc1ZqqIPcX9fyOA+Batqrq+cbVWGat3KM5LpdIzgKYwdV\n+aZWxfnIm9Wic+ACNsBfFgj9WQkMc2kt5SOJ7dMz6OA7Ehr2kTreFWkZppH1\nGNTb5zRhFNrsAVN4Y1Bx7H8aCRWGIAkZE9EnR9rfqYFFVd5GiTl6jFkZx91Q\n/Tf0NpaMyHTnCBJc9zzMllNWEQ1zmLo86id9/Sv/eg8wlveDA1A2VAyca5jQ\n6t4k0w4ygLj0ivKaXENkK+qW3V1/OTC4gkIpcvZNWaF932MbMeizB6uZQ7k5\nBI2CI4ZgMPPY1jIu4HQV0kPE3ULCH9IpOBaZfS8MxUfIqH3YMghfi0aPkpxs\nq1CTK1brc1GV+zjNw4Kd1AAnnPZhEXm3wfg0yukI9gvyT3mwqN5sa+GUANVR\nz+6w\r\n=3oFJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKiQfPuVhGdwQKkzHi+G3Qf+53UxigZASKaQUGJM9+mgIhAOb5c3DzFqMCjL0Zwv81xpBksPMtXfcREysSJbLA/GQt"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822162743_1566491411462_0.42006457272220366"},"_hasShrinkwrap":false},"5.0.0-master.20190822232250":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190822232250","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7d213624a7703aa82e929c7732cf560eb4648b57","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190822232250","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-QTzcO3DLT7IOdDh1fZ6DHlhcUzt7rv36KB45JAehcXZ+kkGsDJwGaB0M1zEMJmnTpS6vR5bv+EGKEX1vF3ildw==","shasum":"6f211ded777df7955076dcd915b08dc4dd2b7a8c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190822232250.tgz","fileCount":113,"unpackedSize":2124118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXyR6CRA9TVsSAnZWagAAXo8P/RXMbBVnou5JWzH83hH/\n2XMOJlc5Nmcc5A+SZXez74mjq5fH8ROTHSfDtMlmFaKxJarY7hUJf9nBzy9n\n+pJj+lWujNR2IiSphN2Bn3SywBNyBoBN3ij8YQCNaImGO6DtwEz8iziL8t4X\naa4QV6oQqj1Q2N7EUYNiWVGouwZTbQl5FDTLS3PM3cwqOVa5ZJxYwXR6NMHN\n4G0OO1thEuq/xL8YEhqdHPH5EDAyCV9XuO7iRU4xIC2G2vkwZw2smb2Z94KV\nf1Kcn+jiNi/jV3TYU2hpHay41iuHf+ID5pi3AsX0WKzMPOeE6YrBuxC0KWQe\nNUKQMaAm/VNoVo+h+346X3/UHwgFZXimM+MO80/iBW/2GR/kByOYj+GbDoAT\ne2ZWJCjNEc+u6KFLp8O5o1etVrzJiBb2SXFiIZg76WKIvZnFnt6Ou0Ldwuxa\nhra34QBPO5rFt2+tn175WGwf3nFgTui31n6bV9hI4Cf2T3zdU7OoIap/qkj8\n8bg+SdeCDTst9TJMpnUEfFms2f3glCXOYe44ET0ujWarnj0IpPmqnWVQs6XV\nnbEUkqO08OpvqsysxHyHUY3cdF1xRLA2P9NYe6g8juIWOTIfeCxm+LAlYzon\n7lyCkh3oAmzjKvUKiZWcaREdJ8kMKET9/Fnrf9e8cHFC2ONRXkFNNTuAzf7W\nYzjt\r\n=CvGL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGEjdUiGz1Hp1SG+QSwOcNeW/1T53lorx1LbY0ivHXAuAiA2yo/i/mePq99gsr2/tDxiL6x8kxLqTvVeoIqEDmtd1w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190822232250_1566516345638_0.7182447213817764"},"_hasShrinkwrap":false},"5.0.0-master.20190823073847":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823073847","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"adf49246bb937792240a1487e9f5fc5d907f37a3","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823073847","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-JoGLt0RUMiSOelzNYyV1WM3iE5N9czCEtaI3n4qp8mPerulatXgzk73ZaQ4S/Q/xeVIRvHUVMF8HzUKCDmg2+w==","shasum":"0dc73764d0e1b39349bb23d65419e567ebef470a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823073847.tgz","fileCount":113,"unpackedSize":2125312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX5ieCRA9TVsSAnZWagAAuxEP/1Rf25daCH689NwQ9Vqm\n4MNpaMX36GIZ8lW+DqMUtBdZJG4pg2H1gjntwXLSe+6Bk91eMEBMO1Vpf9vi\n2V3umXkK0DlVWNSo31n4OuSRw5ZX+yDFgLgB4u/7+Z3S0gUY28qbw0DYHUm/\nd8mjXXWOWoAQhQfQtS1JsQDBHfQwuIboWdPPSxnvlCzlyKafYucIALTx4FSi\nMd2to5pWj75RiT9kU0Ht05/Aub/OmHk77gYfKXT6UbKWjVrOGxH/GSbiyZlH\nPJYIwRxHpF8aOpIpALbXIdS2wA5iOBYqFpxVgcFlokG38vCwv0sluA7QA2rO\nKInk+9aIjaUsodv2CF8yBiBMSNtz1cr5g4OMgJUu5q7y//Sf+KgUI+vY896z\n6YZuTZbUy9i4CHt737GIKDlhSjhoa1dZQ6aZL6z1cn2oAJDxUb7kI/Z3z+iF\n2XsPvyyAH82Hj9DRDC3ZBt1kpsB/6PT1Q7pPcYr+fY8elBC5pMEwGFFMPowL\nG8DTLYvDuoMNDORuz1n/35+izbnkyPHPmQwbqT9PxCoEdhu/LbcRahCbs/No\n7Qk3QP0ZmtXD9Nynbd5ifv/2Z8KhHCFCSBCoiHn2Gv/GCbuIdRPheoBNNrbW\nXO57zC+RmsoFoE9x0L+Nk6Ed2e+j7vOlLSYUxjaizFiFikJigC820dGe21IO\nIlS6\r\n=QuLq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0ftG+WqTo/2HvhUeA7rq/rV6uy/jN3LdlbXztUZdyKAiB7NrrqipRWVHdCmuZ5ubIqnzT03reRecfGZOKmkVy13w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823073847_1566546078239_0.947933891907506"},"_hasShrinkwrap":false},"5.0.0-master.20190823093033":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823093033","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1cbc8cf4570024f5ac25df27f8959f39958f321f","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823093033","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-WOzj2ZVhwvMGou9PxoCoznEmtp+/MIf1i+bunz5Aa7gj5GD6pARN2Gyl7zuUbe9d7BgxqySV5bKrXnx/ckNaAg==","shasum":"36961e58cf9818207a6e6d13e90418cdf40d659a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823093033.tgz","fileCount":113,"unpackedSize":2125603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX7LeCRA9TVsSAnZWagAAo7oQAI4xtvLHdx+go65cPWEH\nRKpqRuD9zSZVGpnLiK8I6D6G3egyfTfdoMfxBXR4IrkXAUjzGtlAevikHNZO\namEZWJI64W3X6CilDs6PX9k4sAc+mdhjX/sUd2ztFlJf0QZ150jAi3gYkZFW\nSfboKpt2PUa1Il2i1QTMoExV5/1Z3EqviwIJ2NN3GssBxiDcJjLfUfgA1Rpa\ncZ2zC7f4xDCVoNY7npu+6MH1I5f5M02+cuBwCBdci5aSAUsyopQCgE6/wn4B\n48ta37eS6R0wxv+11iS6xtQSNcC7Rv/bZLMNWKe6ij6rBDY1QWJoAevtU98Y\nyhbUdBrOrq15dJDEiBQckDA4GvYHDpdZssPAEecHfyV01GBNfoX1gbUAnS2g\n3yb0ZYuzaxvEY2LuWcBrI6yLNqbj2lU/c8ri9lbvDTQnGLNp64IzhLI7IIaZ\nUBvOTzZvROnoLJWQxj+jxL2yBne6EMqGMITEJDZtNrpNquqVgRqQgzV8g5ti\nDK2wari9jdHpALwZhzjpWxbDS56BMfewqPtTzUse6VfqonhiRk/Z2pou1dGR\nMV2Wk88Vrn09H8NgCyuE3AIMZdskYQamkAQNxj278nYjZ8rmxKNXGI9PaOtz\n8Q2Bn/FuYKlrBhSxX8r1Ibu2VAnsdFUe3W37CzfjgciFcNJweMQw/hbzFsxU\nGYm/\r\n=SPxd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6jsGJkY22+7/3+hk2K9G6n8KfI2rQWmY7lqqiyxEo3wIga1FoZJTx4iDe+Z4ltU4wlYKB4j4Ga2Oegjzx4J14stU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823093033_1566552797383_0.09754184660164222"},"_hasShrinkwrap":false},"5.0.0-master.20190823120226":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823120226","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5981de100f8074e97bc8c6e4c757e585d804570e","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823120226","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-5naiamQZvBra4hcoH7BG6Pv9ASefLMm8oP915RJt9X4y0C5P8BwTkYVjJ9jCOoKl/To9wwzkL4ICAuw9KcaDvw==","shasum":"a1910b85fcc5e3a37ff61345f33ad9b31577ddfc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823120226.tgz","fileCount":113,"unpackedSize":2127068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX9ZgCRA9TVsSAnZWagAApBcP/jjvrlW9mQafYUBuxD1B\npO6gv0xd6LObD0meE8UYNaU0L1Aje6mrOjmfT4MRG4AzHLKQcyaFQRYuQHCW\nFTBpVDil41u3J+SrBa8G/LIDEKGJAaKvMQPzoRRivUgwFXATLp//rpgmKK8w\nUAWWd52QAgIVlM63Hz8vsHRG6eetJh0J98rACFhInlJGH2Gq0ZyPppU4TtN+\nsvrRjhbAHer101bm7XYhgBqTJQch6/xqAgG0jXXp4pnnYfcX6Ukl/MIF3TDd\ndSGpg8OtHh7VQmVvpcf7GPutFlRo1kSpT2s+sRnAWbSUrBc/sALP8k/zx8ph\n0ApG10kcfj34Ip8wCLLSNhkAEhY7ytqkuzbuqWfNyEsS9nSCMBP8yOeZNiNa\nBKqSrVPCn0ceV5+YrIkXtXzorprrvblgVL6qkcNlIvvkA4+gHnHR8BGE1OYh\nmYpgFfazS/pZueFIlhkYwDRlc0/VJ5SqPynLCYed7EPw6wJX0DtEJcYa1aEo\nlD0Yizgw38sgjrsc+YAO3CpiQKSvU49MP+5uo4hUq100j6WAwErzBNZIvRIE\nbxzP4Kd283TwKGGsL2J5ImQWvCaTpLL+LtoY0YKLyEGlAUbYmQ198CQNramr\nL1qP+tnfI2nRanFgGJPE0WUxawVe6k3e2xj+kPra8sQlazOADXGn2XzpysWv\nTk5c\r\n=oN/q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6jB+0FPDrd5p7u95vUBZ4emeHchr0lb20sSJ53auJpAiBy+Ec6sXkjcERWXMB4vUaEqEY+dT7Q0u9QpdlE9XzGIA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823120226_1566561888117_0.09400719055721352"},"_hasShrinkwrap":false},"5.0.0-master.20190823120718":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823120718","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5763213c39da39f66c2ccd443e22db05077cc997","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823120718","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-bCSwAIAPZSGFMvT1Oq6c6gfIJ2pIe4sW7MAC0WVYDdD3bUn4ZijQFpUqSZmLilQMZpFJmNuMt1hyJgQQ/NCQNw==","shasum":"39a86bfaea31a47bbf74cce4a85ad79a0e06ec4b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823120718.tgz","fileCount":113,"unpackedSize":2127641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX9e6CRA9TVsSAnZWagAAslAP/R2u1AwgAtbXVGxm95go\ndKoKXE6K/35EU7T45gctQ3VKL4glpkwcg/q6zD3G42UoEOyyR+3Gsl6kvGEF\ngxa2dPJf05in/2Bo11HDQqqrE/qDaX84nweq4Fk+4VUL7jfg6jsOLQefLr0f\nT2vXHnl0gr3kvHFhzDZED4j8eNBwJdp1pDgucwcg3boJXAds0f72kTb0/6yN\naQFLYg0IvUf6MgoC8v2cL5MSDSzGYY9vauXLK1Z2LafZM/GrjekimRhu6AHF\nESsq2ToWKSMizesBM6QExUtxGFNM6I6d0sE9Qx45MO2SEdC3EoJuBIKqceEO\nylPaMbdxj+nlrjJ7sEYfkxppM9euz2nHB+4LSikQP6Zt4/gVLotuGif4UJLE\n3e01L5BrDIBVwGBRpvFH/UG4UvRKMh5unFOEmr499d0kHqydEoIrhv8v6z6W\ndBl162EbxtgQGeBAAO6GeT6jnIvcHeTTuEic5W4SfVhqOSAkwwSy7CxgJVGi\niuxBJeKM3tG6Ybb1rcOwNUwY/BeRrBfmj37ejdP3A53NESt/4ZkctYVgE3hk\nswVbtb1/e8CG5kcLBrpmXxT2by+H6M0selyGZKcZXsfHurfRNTwMBLAaZwm+\n9cX7x1f8iOJwB3vXvIjzunMQGgmxn89dpG/5hM328AIQEMY0HIPQkrtSXFda\ngepx\r\n=Z9Oi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8nBN1RrwolofIxctmHZy22uSd5Uu+8uFm9RrYGv9vlgIgFOJXRQZoTw3QqxGEAg0nl9lEQoP9dBX6t42dP/MQXdw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823120718_1566562234269_0.49825808730394083"},"_hasShrinkwrap":false},"5.0.0-master.20190823140902":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823140902","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d564907f3515b5fa0381c7b84474b342b9a5d366","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823140902","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-foz4fUY7yav6PNEX67eKPTKdzqTMWzUmlGi919ikkI18uopnnfNgJ/wh1XD4y8oOCiCpi7QjeKjRFD6ve+9/ug==","shasum":"fc896b64bf04a5f2f7b5e9f1bd483f4b062a9d50","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823140902.tgz","fileCount":113,"unpackedSize":2127722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/QRCRA9TVsSAnZWagAAqtAP/1jthUOvlw53IyfUaj3g\nfUfZZgeAnUmOlo3Hh7QW0CVBoheyGcYpT57Y6qclJDhZ493reYOAysqKh7HS\n7S97mR2y7ZF/uhGPE0wiIT71MEAhKwj80Av9ex3PIN3nZ4u065tuwCyMLe/e\nYIGtl2dg0MHFI9o9jAxaNVEvZjHlNKArSL3erHNBUkPRZhLybUlB5HgvIw1e\nUOLtE9rwnZCYGx2OBJyBHkY+XyY2A9o08BpdBYlN05mEAlMzOGxk0QqelZlc\nHEclrcNMjw/PqCKTX0Ov5iHGfHgZTPFOLDT01wWArvi9SM1CNA0iJF9O/8gi\nHxRM2nAPAy66HDfS+bFlKBrxRE9SRF2y9ageTJc324WbC3NMNfwjtgapC4/x\nBXlJu+XpOCL1YEFfc8LbOybeOvPuW19/BLwsI54trt4tGUs9oBgjYE1zP/7T\nnwAkQKhOQgQ/RQ2uq1qnChSlp6igBz5UtI//R7I20nM9fWA2QlIMRpzhiQDn\nqHpyXRNS4pVPwUoSIjrY0cMF6nCG6l31HVBOTLI0sOh/R2ZlVg4Hz0AHDgU6\n010tEfS9uQtQ95WelkJOMMHWaPO2prNktf8rpPt5TbbGvzCbdmoG92VFA2HZ\nPcN+d9DfPH5SizTna2FLbT0YHcRfLyHzGeYLXZ9FpP8v8YY7GlQXuswF+YgY\nGAgw\r\n=CZ+Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDTF5besDyVwt4ThrLEyr33FramTFjjNq+NbynUShL9QIhAK55+R8X9IS6acNjpyvIgFWFMKWENsTg5oPkzc1iM/S9"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823140902_1566569488372_0.795773765960782"},"_hasShrinkwrap":false},"5.0.0-master.20190823143131":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823143131","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"001a3838e702e3fe0667e88d3fae0e57a8998202","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823143131","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-GNXJmdsrQepn7u4yX3fx1WI9z2D4f2SkHbcOPcrTYxAMKmho/Id06HSt9f+OJ/+arSB6Mi8Vh8snT9Pn1gb7YQ==","shasum":"9de749cc539b5e05522fd98f7a5880dc22b03751","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823143131.tgz","fileCount":113,"unpackedSize":2127192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/ldCRA9TVsSAnZWagAA0lMP/R/+tMRkLDRnFq8+5NTV\nrFEpQemySZB26F6K0Usr6xrLW+6BmPc03TqhfivXjfsLl3qnCwp42qQfKYS4\n+Q+b10iA8ehC+vH8F5WvrWqgi+Ffoh6judyclu6N0TRNqi9PGEruQm5fdxGA\nlDQrdZuEXdXXb0DDGkTcdZLp0w81S7hF0J1KKorGPRQNbvO4nr1NwxUHppbz\nJV7amwtmlT2wr6wr61cKX6N44ZNi0HZ7phPFO0QT10Qzi/K/08LuXOrjR4gf\nzq3iuTHFu7hQuqbIELPsuMxXJrVVuRTrnMnK4vqWSOxbe/SrlmowWW3Nyxlm\ncl0hAE5HToT6jE+u0fY4baY6Ey9louUP7GLIkW5MOdUS/nCT2jB9rbZ7g108\nWXse+mdiE/FTgSNlK/UClV+ZiqW157t7s2sH2fKHGwBukJBlx3Q2fD0w3ULq\nN5xvMwoD6I7pcDFtcUQMCWb7sC5eFnsTstbpMa2xR3029jjlD1L2iQd2dq3A\nKsTYnRoLV3h++p7sRm/GE3WJSlAy5yYaaTzSGRLmfSlA5o/WWf5b0SQvKuVu\nXK3SioT0/XJ37uJARxU5rqN+wNNg6XzubhAUScleQALA2VEvlLyXy3ju7B66\nOtMmAZHXQsLQTqrZm5PVZvlbf07EOUhcLiE75H2UnuSmY2qWp4TPKQZgYoT8\n/7o3\r\n=oys4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPiZ9cnNVpDn0Y3dcrkZ9octrPYE9PzJ9D0aP5aWHs/AiBTv9gBhKvFZ0J1jsQeCkVvtcHwOEfeyxZ9CEZkAwR3KQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823143131_1566570844567_0.2617600254655128"},"_hasShrinkwrap":false},"5.0.0-master.20190823143727":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823143727","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"07117a6fdbbb8f3f1a8d05c6a9f03c4832ad8cce","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823143727","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-8aL5IG+U+83U1OxnArmEuk4GqQGrcH0FHExLcIU58quDSwEfNjug0dFNqGZWuuUc+dUqkx5mahA0wITpJVt4bg==","shasum":"0fab0fcbbeb9d108cf2204903a30f0225a792bae","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823143727.tgz","fileCount":113,"unpackedSize":2127193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdX/rmCRA9TVsSAnZWagAADecP/0ztVTfyKTxa6SxCfTjl\nIIBRtvNGg5ewhYa/dDNyRBvH52dksGhliXGEE55byJ92JfDB69ohgEUIp4Za\n0fqZ4uD7tk6J9Gp+VfDB7pb244rbFs/d2A9qML2bIJhnqcNmGnzaRQTAZ3I0\nB3gtk+JcQ0YGbxZ2kNMPVICTd300JyLbXX0nXQz871Pufa2hL5QiakZb60/w\nb5AQ/tsBlS5q8hPqwjPCikdYtluwPsHDFvfz/gWLl215Jp5Q2RzbSZhe3GIx\nKrJzR3lY/dclj2kmO0Q1FK1ySAoitwHaGf+2XP7JKoiEMdH5FQVi/ctR2e/h\nCwNijVGQm53ywt8AnKHx1K8r2lu0UFs4L0U3QxZllLCTgFyhYvTLPAxG/XuL\nTs1KQbqP774Dwsd06g+G3EB45qCbhuKUCyOkt/JHkx2ed0WSv3cEOW6bc2je\na0ibIrhXgAUx/V2OG2tAgLO3lRJwh/LpnbAORr9UO8HLCdqA7gG8TmEW/5Us\nTJD//GFh1fG0p2d/cQiDXQT8Yq3sjSElem4m4qWJT2M1XWVGBAhRKGzvJHpZ\nGKvbvJv/wCPKp7acS4RLjNNizJCKWJ02PUXDU+c/4YWMR8hs6hHwfUxYmfAX\n1cRrtawqWJwz1UwNlUBnlsdQvionesnFpUGYomNSueIabYT8dC/bCVQ5w90L\n6r28\r\n=CkoG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8jUxdvbqZ6Xg2EelBx7AhOs4zC88y5q3UyhovsD/YZgIhAMBoNg7JNBTJWiRVz+GdD0A0c2PWimpXhIOgymvYwRAd"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823143727_1566571237685_0.731444803881405"},"_hasShrinkwrap":false},"5.0.0-master.20190823150135":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823150135","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"891da5c9206e6acbbf731947f4ca3fae156e2fd7","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823150135","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-yuH8inCga0X5UobJwXqbsRkAnRrigd9C3FW/4dE8MXDpSiaakTWYNUMLjpmKi7j0PIBPnxT65IySV6MCsVInxQ==","shasum":"2f68d628f11346a1ce734edcb65185eb5638eb63","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823150135.tgz","fileCount":113,"unpackedSize":2127354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAB6CRA9TVsSAnZWagAAes4P/i6uZM6IuaayQ9LwqejP\nT4RjnrsbcaykstEudybRQt7QEldbuV+o0ioGBTysDdkfXHZjSqODQ4QID0V2\nI1J71Wh+fr1ZcqXbH7tP1p8dgjYs9n5aOD1+RBZ8WInpIz6ygEbS1iCKHmUv\ngy1CSiajXnAL/brF4zU0VPH0nh/Qpo6464QNGo0zMyyFCTch+/j4jVgjDRmS\nbNc8VGhM1DaG20jXOwEfNiJaIegoAoSWxzzK+aqXStN+pqX/YFho5UA/wdv2\nQsIX4w27YUAtW7DMT7sm3Aq9YKR6gE5MsRE96bxFXeNB0RC7ZC9hXslETLww\nCZj5JQkqiSAmEZtMJMZdFqptDjV7RKrW5JJ4T7o6lfdko16j+FZ22BVcP29g\nrGCkJU2W5T+wb/yx4c8u6oGJ/bE44pue7OKjw1hB5r5BOf5XjSO4F9Zq+lsI\n3uu8Cel5KmcS3bf4IPJ6xrVR9gFvef8ZAiyfE8CAvjPWgR9VjVKe8WVlkCtj\n0scF7iD5uF7DzMXkYgA6RZQ3xvbDqmNaxCnp03TSfjufrreRc4F1hJe1LW0I\nxIOVtaa+BdjsLNYvebvca7xIF1tUbdSGvme8ATux9NdOLAIyb6fE4ZxBcMcY\n7RuqLl7eEv+iYo5vstuqC1vyECHOprTJQh1CCl/gU54g6h+tLwdixyviyL21\ndDUS\r\n=w0uB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBYS1VGwhtGNnWI/B+HDKQOjZe01otjSr2OxqO8iTeJgIhAMcK9gEQJscK5Y8r6UgVCF1p1cziNj9So0CdxJeC1YBi"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823150135_1566572665460_0.9772280109569433"},"_hasShrinkwrap":false},"5.0.0-master.20190823150500":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823150500","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7a6c3872fbbc50042c076f1026e82140c5a06411","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823150500","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-+UuKu8dZjr3p0Mpqcaj7IGZhGHkZju56JDTyxInvOiuljEIKodw7eFijbdTMm9FNtNueQypiFCMolzd+WEqMTQ==","shasum":"973233222a359f0c8298bb14ade5054e0127bb4d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823150500.tgz","fileCount":113,"unpackedSize":2127344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAE7CRA9TVsSAnZWagAASJEP/AyOczGYY//yrnzdEHmC\nwXxu81wM4KnrMUHk3N2pTm2iKY7Bo5OZtxdYMjOkzzlLR41TcCPDi0a9NZ6d\nr8gmLa39XiZ9hkIPi6vJ+y+otFrMbb0bXG8LsdT9H4D+4Vrd4z+VPgP4Fcti\nMs0Xlk+PIEUY3Cs0RDjqMXxZlN/PKkjdRsi0kWNjA6Tc8Cupxv0l7ZJvt2dc\npkiTvRfAka5aFH9xi+7v3eWeXcnTM8i8/quXH7siMFSjCaoJjMU33EoXS7A4\nQjWpdZwtDZC/0xOMzOWeqT5pe0N/6mDSFNmlByWhAzwZ6cNxGDN4AKFYllhg\njUe6tcz6y22YYbKBrJB+qJKWI0KO1osogKKWC0HLCgNV/EH77d4K/fBVU4qt\nhnG7zdroXx8NCB6wNXJznyCvtYG9L7F8VKgGYTzIM+w7TzBFlBUs9ENdRoS/\nPAUHZ8f5gifm7ciWyalYZ2h1jMdf911caYSH36tFk+K9vnv8bR4MSztDQzxj\n0Aknll8ZgvTpHamnCcPSajdktWmeA8qXk35j2S3mwulCsKZ42x0c8HGW0LmJ\n0gQCgf3ew1KexCl042FFZEa8EvsMx0IVlHDL6Wjq1DA1a14ei0xMWT5ov3Jq\nPElkd1wNJN06pI8dV1QsRcsXaFlzvxs2UWPlwiAgEQ8JPYZ3g5K7SM9WE+Wn\nxz2v\r\n=qOea\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcrWwG7YR0m9Ru19I3HUzrtsWPU/BeZ6jOZLeFKkLi4AIhAOEbQVeg05GRF7cLrX5qTCG/ltqvcEd9hGtOMsCnYWto"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823150500_1566572858322_0.024725563304110798"},"_hasShrinkwrap":false},"5.0.0-master.20190823150530":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190823150530","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7a6c3872fbbc50042c076f1026e82140c5a06411","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190823150530","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-WNhXCScakds5SoCfS3c6FI717WxoWMCevZ0umJygGl1VaYYs1mpmG8NWyIsUYoPvn7fs3pJiveGYtHi7CvvxMw==","shasum":"2283c1e2188b9f46b7b2f3e543d0dd630620a8af","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190823150530.tgz","fileCount":113,"unpackedSize":2127344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYAFFCRA9TVsSAnZWagAA1D4P/ijOLTDhKJ+wNuAYsaVd\nxlIKki2NZkhgHHasS8JM2secgjikUll1ZoJO+B/do4leGzCtUcEvKKwzH3Jo\nF8M9fHluDtOwXDD33CNE/BkbtKHWrdokKeDhlRA2BpGYQ3qiK6XAyJREzaqW\nRGnUGknQsfGSV+HYpmJHGnk6ojTLGkhm2YYAUWcsnVOuLMoF/qRxGSikyFIY\nbA9zgxxoPfcDgA4XDbQ/Rh+k34Zsxl6/Eq+FTLCwVAbYIOsw1H9dY15D3Fbr\nRZD1qa1C9seCqWSuvwL8trJoOPuplkqBQKEGTtSwPWS9Fy8b+nl0z4oWsvaV\nMG9nwJVMmDIiTXDyfpGsLd6NiaMASACm3ixaar+5ZRw25fgivHZoDqlpxK7r\ncS0W/rGJeWkYYY2gIm3Vva60Z/QXt6yzU5fOlo3a12Jv6iZqX5I+o00gYYlS\nTQIcrGQD11wYAI+36fvQkauIz0Ce9uEXzZRmvn9SjZAEI0gq8H2G8h8CVqIN\nZ+LZB7sFzT15rY23JeNLz8xPk2QqAJQ/y86wEqpaLGOqzEXeBANMx3Y85uZf\n4pD5ZhkKui58X1lazYbGyXbGvOICJcbBR885+bNTZnZcnD1vB9RZWlMD9K1+\nCagDHLjHqVqfgcCD7Si6bgMeekaYIKL9VEa36l0YIOICx2Gh4Z6T7Nt3TzLW\n+6dd\r\n=m4DW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBan2YHNrHNJJoNTpFa4wPEoNEbzUpj5sZqULdpZC7VKAiBKAnJjsP9mLwdf7lNnDyFnz873kG7JOtma0OM6cTHmlw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190823150530_1566572869170_0.7184816070440934"},"_hasShrinkwrap":false},"5.0.0-set-publish.20190823162648":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-set-publish.20190823162648","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"54ddab44dfedd1c4ca4e82eaead09223dd059735","_id":"@atomist/sdm-pack-fingerprints@5.0.0-set-publish.20190823162648","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-kccutOLIaxavyZUzCajyYDr3Sy8oWMSnG9YgAqvwCM2FiafCG4BqbLm8HUVjG0WobLo+1O1iWjR2KColA44SAQ==","shasum":"dd0ec3d8f69e27cd9840c61ca29f0c5d94bffc25","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-set-publish.20190823162648.tgz","fileCount":113,"unpackedSize":2127821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYB3jCRA9TVsSAnZWagAAsDAP/1xUUrG3DitNuFT36PmN\nikRFrMB8enA3RrnY10xw1PoKJ5pfdW5H7UQacHKeEnLKtC5iaYYxl9mLjOSG\nBQGfvBAV3+pHAg/ROjVyvK8G7SABXPK/enTxoKcE9xIrWdfoa7k6Z/AF/3Mf\nW51KqvvVd9/rycKD1YAq5bnuU1KpmNVd0216Osblbi6YEuRWU4tK2ayjUGPa\n6YorR0W/7XH+JEYLFyC7Jv1tqFXH2vh1+6TRafECuESLRVOGD4/cqHkf6vbI\n3htajPKX7UmDh1vz7Q/df9k9r6dAaCKHfqjcsapCM7sZ9qXgtcK7mJCQwAsa\nVn8YrdvUxT/y5KbMJjyXkvo8mrzeGM5wBTxD/GiNnPPzyHsnPH7iRt3PKTGX\nyA6SwNlV4P9GYi3e983KloNnzPaHdWFwwfBjqiqeRCWdvu0goOPcynQnpnad\n+FqZlpnk9+Bm12om9Tero89kzetEwysOgN5Z3xKUGP8pS0feCdzglse+vR+u\nPDJv5L29m0Qwbl4wqkJuseZhKYaFjxdxYJPfo7/B70NoTrA4pFXMEJE6VjSK\nmOOSMX73ckWKo0dBKYKVC4uChY5KAMypQjtJ6biAvVErMNDGg/4AY9EIfTUa\nr/eWXeaP5IGHtE7Yh2802rnVNOVEAgFPHndcceD1FCbwLp18cjX8SRN8THh8\npmQb\r\n=HtHl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLSfXiuP8cW051qdWmMxqI7g4Vwz2fmGy+h6uEmKNORAiBKTs5qld+gIBOHo07568oZKb2AEhJXThUQb4qeiUEMjQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-set-publish.20190823162648_1566580194846_0.3419941210877224"},"_hasShrinkwrap":false},"5.0.0-master.20190824231014":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190824231014","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e39c5150fb78b560dce4bcf6d93f54137ffc9531","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190824231014","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-5+iXNj9mKn+9DKjPaIKxkkQq7Xp0DwadZRP7iY9is7y/0HptqOqCWYubqF0YLPJhwqMZp+jvkEvaYwiHpGWeDA==","shasum":"0e32ae0804d07f2a6041eec19a1f3f9f99fee717","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190824231014.tgz","fileCount":113,"unpackedSize":2127816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYcRjCRA9TVsSAnZWagAAGfQP/jWJBdu660tPN7pD9RBv\neGEGO3b17X6wLGRrSRrlq7ri+pjQ0cm849weQysuG6iQB7jLQrqfdZFLpiDj\n3LadXpHR7HMMNS2J2/QfKIU5gukbvwJpNg+iZk9al5ZMa0neKMkVwoOZFte8\n7jPhTWEzoR0AsXKoDodo1T1TndXPCqzFQJ0QIwqlUI1/cf9+IzBLfP5MwsRV\nUI+F811vtHnlaqm+X2ELYNDQePmEyHsCwt1xdFhp5RWZ/L21+xBdJb5PjFp8\nP5F0sR7WqAYvmCuaRyJAWHktmicnE/69xABVKRaZkBrlq6jOxmXbiKFcLP6e\nwhWS0OGCKMTkvc+SSygIFdoSqdLMMJcB/vSJAB1sKUd6jVcxnSRJ0GfJTcX9\no3/G4zTUG/PIiGXP7YE8cX/0Xh7QwH9mvRDFWs5rQCDBknGrDZYxxIXR9rJL\nP7733PppdK1bJaFCabEJ4655iYgO1EpJzJVvag4WneIR+vlV46xiXXn3BvHl\nlQxSOB2HWow/OOPLNo5IOd4Fld71SioO74LC+UopSByQfkjtXs2tAZgG/4GY\nhp+gjrofLKIqitsXhunU5ARN7A2bnbVKAI1NY07nxp0xUC8J4X9NeiNlMl+X\nU7frFbSimdDu4/nxoBfXiY7V5QW78wTr4C/0xnEXXsVnB5vP0hhkwwguA5K/\nxrhA\r\n=1fSs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2e2ea3jhq7a/l1BOAzF1sT/VdHYkoh5YvBRRV2d1nzgIgSnCkiW8M0VYM0P8hdENNoJktFTyCQkPqWkPdQcO+Vo0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190824231014_1566688354807_0.8335420572851324"},"_hasShrinkwrap":false},"5.0.0-master.20190824232610":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190824232610","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7a60c9e6412a569017b6fd418b9983638c24693e","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190824232610","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-axcCc3lUyiFZNSIIsK1UD0uPp2TyvleQqsp99eLUIN8dWOA+ZotIQWoDEo8nA3e4UZs/EE5mgIv2RSoEinAYGQ==","shasum":"3480e0e99006d736246645ef86b60e01ec1a3d90","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190824232610.tgz","fileCount":116,"unpackedSize":2129904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYcghCRA9TVsSAnZWagAA8KcP/3m7yPBvCPZnMh+bjmN5\nSJVTpEbCWV37aZa2VnJKA//uaop8P/VvSFMLsm02lc88G5GkB7expYsls070\nqK0vfiZ8dADiMfcGRCiXI4EH2GGKHwyrbzojJ4KYXS/mCzE1dH0XV+x3AhzD\nYwSR1GVmXfdZvQazrBXqk1UE+F0EpX0h3/hwsqmgMK3Xlc3hvDbczlxIRLOt\nN+ppLtObPq5q70PZzN+dVplU/ne1pht4qRYse1kqAqp5+nxidKE5yfCeoh0z\nHVseV/ihw8ZftOBuehzU50S1DUxEbqsWGbojZso9c+xuHG97K6G4gi2HboEZ\nhOVvQ3rvg2/4BEl8HCtAT60DZI8YN9L95Wwax7K5CJU/R1kFA3KNjUU7tUKq\nsGlHaSiQ9DQCm5RQJ6W+mLHgc36Lho+prGmDWgHXpq6dwR6psK7Pf3bqXu/h\nmZAy7BEKdjbhEtq73sR4pK70SWp/0twoMCXS/EIerPpwp4mwVnpCP6WyVkii\n/3Co6DsMyCFab+01FWzS7OLIuytPmD1F2AEhcM8ZKF5S0pdnTBaTKxSpdnW7\nACKl6Ymm5l0IPHKJYmwDCfEF/MLI9lcIwv8T58yt8y+HeGxFsA2tqA2PDkzt\nq1fsgtS6eQVawbrB/483o4Gu3a89kqT6UrZfis1czZTM4r0XITSXMr9aT32Q\n3FYB\r\n=Nmyt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHY969JAnJlnV0tlXC1wWa0A22H5kr9n63Z+8z5+HkwuAiAY9OJH4MreYY1zIst1EUzMV4NMUe0KmLt1O7b6IB7Iow=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190824232610_1566689313203_0.6087835756652449"},"_hasShrinkwrap":false},"5.0.0-master.20190825000414":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190825000414","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"978fee8c4f0d229b4835b6922b9099644f4964d3","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190825000414","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-YyRJxG/LOfC9RVursfWWu4YmAQdVvq4i4YKqpoGJcjPwXtzW6Jrgo2MjKmmXRC4S+SpMptAnghZM7VXih6Ysow==","shasum":"b2a048c04295b381db38a64cf299deb476d62d73","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190825000414.tgz","fileCount":116,"unpackedSize":2130056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYdEZCRA9TVsSAnZWagAAMo8P/jTCciRCIPEdR0wn/EWY\nvDhuXzQB0+cyqMUdPDMu35jJ9o6X8eiWRxqAvVFvp7m/zWuppJMqgChcSpfG\nZZmpp2lbKLwEimRC80L2h5CtnMw0B5egt+kddXv92JTyKXxw7Tvb8OlWINOn\nUw/MLVSNB3Kw4dQnBnld1FNjp+aZsavoRvz+CmE/XLd9wpN7iK565D2QPnQa\namb5DGbHlYuIFEjEAopZg0YkU/g1FBeUf5X+X7C2lXuAW0QqlfJjgJEf6Wx0\nI/cEZEcl4YIErWy8aMzKon7p9b6IY43Wew1MW7O0lCtg8sCE2I66ydFFOwvo\n7IhOMy2LRtnIWAiXYUiqGfvh840qsaz5zoke3o45B6AlN00CVTzCHm7VvaR1\nrcxPIxIrSoxR53Vb0tk0X/VVR4NCt4UmdR3RlzGTGh+oEKbH49p/9limzq9b\nMtQKRpPWCmK7ZjN+UTKrGvaQcNe/JjNd4Kb0LeReAoDR6FTAS+lic83nUZOR\n7InqqA0QgglP0OzkxNi8nQA7mdphIu3oolG4RdXfqaHeWTqWuitnVEIlt1c6\niI5emOKGQl9M4H70DYZ6rfm6E5q/TePcqVNyc+oJNsfRnaUGNd+l/+nLawHh\n4utT3LKjyV4ba8ZHTfMKIQOWzcrYARyOK+7vH1j8UJwNU0VdyfOE/0sUnZRK\n+c6Q\r\n=8LjP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDoHJ7dx62L113rJ53OehAjfo6w/SS85O4AWSwcU+oxfAiEAlasl3qT0FfCu6Jxcqbo5YfZBVlkBN9CaEvDXsJLaj+U="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190825000414_1566691608395_0.980762903248843"},"_hasShrinkwrap":false},"5.0.0-master.20190825104007":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190825104007","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ec93aaea0ce78a07f2fef133313a119d2752bd11","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190825104007","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-3SchXk29lGrwk8aueVlTp4Y7Sq40W2vhuvFZY4eX4ZHJTXPQBsuiaEbTYgybYtY9LlLynak3j3ENOWOq/TaeGA==","shasum":"4f96da8204d6304007e6f5ad4acd2d50df680540","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190825104007.tgz","fileCount":116,"unpackedSize":2129875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYmYYCRA9TVsSAnZWagAAD2oP/A8/rv0DmEBU5kUZfJRJ\nJk/p5c+EKCogDUp4NBsRp1Xo0bdzKS+HFboUe/02F9QHh4mJMfe3KteZgrU4\nKDrW3h531gueE6GpwvxU2arLX0cAtD+8EL7GZb38FG2vkSPiP/GSK4Gzof47\njYhrwwtGT3TfXwwVLJHDmgKBxAx2aXlBDhTKTglMaYUVguh8LAMR8ylwcuoD\nBL9qYB7HrwWpfc+RzSkV4Oyy3Xt6d18ofkNju0PmK3I/i2afJlBdzl7Gu7v/\n+jgNGi+4IXHkoZ8OTV5Hch6566ZY4YwoEyi7PcQISyU0Gtz196fcRpQeKJVz\nOxs9qR1k4qqqvP6SZODBTm9eIAHDdROF2geg+JEdKCyeFxIAJF5EiW2UZLpa\nFXglDfDDpoV/0LihVjfGSi9AxTCuuMjBT5jb0X7JXTH602MfeccAUYTAxttU\nAuB0/xDCJ0tJVmdfn75Q5CDNxJU/Y/Pekf9+xP4ACANc3wfqyWgzVeZBtgK1\n6vLi+Is7HaszyouVyBFftuIEaWInckQtU17zcRL3hXH4ire/xnLATTv5bZhB\nTTNzmw4XDgI0D+iK3Mz2CthjUbeHPs9KD83flSogqBVlcEaWztz9506VVSIu\nscrrGYNwhcCicZ78+x77fq+v9X9BZvXWWsOmGBAsRC15biPPcKrQlWgwn/3b\nRHkS\r\n=gkNW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdqFiqqH09KzwpfbbnjAROIquFSoXTgxlWFt+VshGI1gIgM6sbHUMSCy9eJSCunUo9b28/qrmzOJ8tcWMyU9k6kuw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190825104007_1566729751868_0.6958349398757009"},"_hasShrinkwrap":false},"5.0.0-master.20190825151449":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190825151449","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"65d01a886e09af576243cf09c696131c3670b071","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190825151449","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-ufjGhhrXpr3njxFuAk2YfQYzBdDGUrm+T4Gb0usmr8NyhNTaIQXwAqKKZuxXib4+GtXh+3B8anUoMpH5uj8f/w==","shasum":"b0114b7465279a8d96d079a178d6f44ffd43719b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190825151449.tgz","fileCount":116,"unpackedSize":2129877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYqZ/CRA9TVsSAnZWagAAgN4P/RVKkpxoWsxQU12xgG1q\nKHKL2Lx6SPdM1RnNsbT+Iz5A51sjlZCd+kNnvXPxRbm5UT9UPfoav4vfmZwH\nHYwbL1BPVKTOsT+H7TbvPudZdD4AxM0arYOhg+H8YX3mTDGxchcFLDiNrEMl\noehWyd+dSPACV1yqmfZ5vxpBZCaMaFohU7fRVZ3iFjgQnMkAx2Dofu9lymAS\nnpmgAey7BENJ3SA7JaIXppgoGU8oSnwTIAommWBa4DVUV3PWwdhrDB+Qjnng\n1WJWH4jju6CRDEsjhGkrlyl6kKjY9ThKAfCoNZbBYB89HKAKIlA1zYz8Emrm\nlP0MTb3eSSmIuGYPdsWo3NZi7GHHEq3JJBbYZ1A0V/WNPi34pekj+kCrrtR7\ns5jcyJthtVVn7n48NoDlPzsZvzZfjLCZ/ScD+o9SBsgC2lABn6+ndMidOjE8\nLp4kBcZs2hfJPC6Z2fL6XMapttive472ym1VtBgij5QFSh57P96Mvxb82J4D\ntpauw+mIctXka9znU1Qq5GHCwrTrHVnAA709RmT2Eo4HrKa6llCJLz+FbuFK\nhN23QQQuAGvwa+PocxPBWULnkiG6Fu7qLFdqi/mnx2RbkzCirsEMa8lBwS5+\nxmi4yNkEOK29Wf0DPzEkSkNw6Y7LnikJgl1FUnyFb2qvyVUfbIKXlqPR4oB1\nYoYp\r\n=EuBs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+oYHI3iBe1GT20svKXVH4+qtmmnKVHcrgsNkkN7bbaAIhAKq14tw9dwPWbxn4N8ahkzTEEQJoTP6X3TtRPbVVZg/5"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190825151449_1566746238770_0.337187058001194"},"_hasShrinkwrap":false},"5.0.0-master.20190825210309":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190825210309","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"27aab8348806956892bac413476cd6d549800c49","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190825210309","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-qyoY3v+qyM0IKV0hBRI94FUR5BvIRnLvIjh6oplQWyeDhxplNo0GK0/KgYshJpZ9xOknpA6+QD716gLP3kdSxA==","shasum":"fba078434574805530854335449a577e68bc4af0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190825210309.tgz","fileCount":116,"unpackedSize":2130162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYvgzCRA9TVsSAnZWagAASh8QAKCUKGyNehCDnzPf8JGy\ndEpLwXfLkiNs+FKUF+ycsZ9g5ibRWhS6tF4knYCGvK17WBr6ZRK70J5g/8Zq\n9IAiGj0gTG5CuzXJu1yu2TQvM2uA9t7yKt8pKYthhWdT1TH66yoMRvi5qqoV\nTs0HGpcB1hVE87PdeaIC89okzoP1mDZm08OI/h6IGvhDx2aQ13U+Fh4lpUOw\nrY82XxhAmMxuTti/8PV6TCGV8bg+oSigC2MTSmsXFQF7Ysb/GXH1m9ezpnND\ntQuEnuFgdO3hJh7taWrmxnfArg5xcQv9oE3VEp9XAX88QYR+smPMHZpfHZt5\nno0I+UoLCmolw/W2rGik39mmMTdABPcXyHg1qoxiSqWMeiJ1F90S4zJkDojx\nV+sahZ0Fdt8dIYRxtz5x2DAXN18ufXxk3rsxi3LN5r7M4Ly6iGE6JJldkmUN\nKzKxRvCe4x1vmWFc98T935IdbrRwXoWkBm7vQxw6NtJRCWBf29OdPCZDitlL\nk3tuxjPxZ7/po5v0CWwFjQkhP3RHqu+W9tSTpqzUiclEyXdzrpejM0wdHpbU\nBeTBlTkvFLUufQWSWm06OFqM25tJeHdAD5zggf2bMXqh3tnF6EdHiaJzyxIx\neTWr6XqLp1IOoDAGLnPBpjeODPs0QoLBzZL/nNlvpHqmXot+F7+pKLxyQvk7\n+zqi\r\n=3ISA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGCJgRSmfmaRScsrpPMOQxvOzNENuPPcodYlr4B6mZqIAiBMNzlQCc2uCnRNUFwVO/B90p8z6bUnd/zFIlzkVepfiQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190825210309_1566767154498_0.3068558534428272"},"_hasShrinkwrap":false},"5.0.0-master.20190825234820":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190825234820","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"628fc6a29804507aab68c5dc9dad7ff7ee233c6c","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190825234820","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-lkL9tGxSFgQbN2brXwylzqpID1nE8VQi7sQHTX5am0wxm5dJHnsOTFZzpAWPOxLfHypUHgDGsgolu9Riiwol0Q==","shasum":"ccf7a834a742b202f3c9708d5e91bf762040057d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190825234820.tgz","fileCount":116,"unpackedSize":2134344,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYx7sCRA9TVsSAnZWagAAw54P/icnl53HUSrxVxoyRTvw\nmzfqofsUxH5UkORBc+nSC8NGMWmj6IsCRqqBRjTAYRq5VznnYN72ENmgClAd\nMa1J9Y4cioqsxLTMrHP/Lc5RIZ6yO9icxFTVe2xCragdenFQIjcI56SDmLZn\nXI7V8dtLAgQ6rfnbRfgROf1vMNJtmwBJIjstfHPQ6sbtWPUvoaqshXTmYrv/\nRjc2IXSZbnlFsLrWcbQohIbfAQUbgVEYEtBKacCIMZIJqiKpZB6MQNkC3ISv\nnNvPYDBsnis/wYh8Ekd4uFOpgQao8te/EOrLpIY6HOFU9GxiRHc0FFc2JFVn\n4x4C5a7CmZR+83lzInhWeDSlS877r3e/EnPaLxqCuXGGybMaPnsCpMlTKaYZ\nqPv4YZ2wb9Xc6lindPclblLVHyyJ1kKXoZ1n3jStwcJH8iiXzJ1B4RyfQEC4\nSJyu2ecyff9KYinzXx8VghZKU4lee4W6YVHYT/WSjx3AEhKeZApacrelh6ip\nReOw5QIaolqMboOnEnRWne4WReisj7m7/u8Fd5tkjF3fDOjzgveQ1xWf5Ho6\n+iVGaEw/mb7HNdvL+2eoFa8EgW3qBkFVzC9Say3OGJ+qmkF8D/qlTbdWWIg/\nHCl71WRjdbyJTMmkOs7E87Y8BB5JR/HYftwI9NucVZSgKM0V36SvWJDXJEgr\n5G9G\r\n=9SaF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChL4koPWzAZM+SdRtuOKQVpFtv7LhWByRAM5jDREVryAiBLflfTpecQdwfAcEKDSgwSJK0KvBdqpErChLG9md6x2g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190825234820_1566777067481_0.14771788080336257"},"_hasShrinkwrap":false},"5.0.0-master.20190826010039":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190826010039","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f4ded0f8a0cf2eb765c02921eba352ff076ef875","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190826010039","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-aTwMpUCWsP3SzlMocCdksSKhZlm7fVKdxCa5PxWAUa0wdxQ5+mhJe6WwS79yI6VQwSDkiZNRU+mfOVYzGsYp8w==","shasum":"a5f9ddeabc9c7042fd67bc40e376315f64dfbcc2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190826010039.tgz","fileCount":116,"unpackedSize":2134823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYy/qCRA9TVsSAnZWagAATWcP/RG9t8uAKgo0jC3apfqn\n8Wbtwll4IcDnd3ABAdqgUFrrMzpsNYjULZPQsqFxrHhWXLL6sRd8/U0hLU67\nm4UguA9rIj+uDbRmaioMbweT+VfGUQkklL8jbDK/ZPe3YHWxij5JJOFyjEnR\nd0VcOdYJCBB3p7ERMU64uR6pr9bUyzGkYVqSxjypC9RTLNMsVKMwvWPhwMZS\nBHoPY/WjBqGqiGiHDAjHZeUYSJpv2rYPtwFqFRLN9yxN5LMNOuo8YQkfps1o\nreYf+5ptHZVS0WBbQpiZNW/9jeH0wkO1I6SjFn2hr5BWI/vNDwikIvWG9Grn\nxakMYUj6xRRrrYIg5G+4uHW4D/w+4NFqPiihujGY27uRhT6Xc+2u8srwx6uW\nRmIbCIDfJXIYYviedjPhMR4ua+Cg12rtq0ptmkHJwb1WcDh2vHC7kamF/af0\nFeLkaiXAPQWE+XPaCQsMw+nDZDba5r0Hz0NzdQs6HoA4r49L4T6yoYgH0rw2\nDpHrfYF5GDrNaHGpegzpEyxwUkhLgvVW+EoIOGZgRi01uUt2zJqnSD4BXrz9\nX74v76kQfBU7rhK3IdiD27xpJC0hD17Zh1yhPdw2IPwIP4Z73GUP1KUthg7o\n5aqUsz6wm9sO6btkfDNWHsirnFft4ftuCbueN8QWA+BAFgmLUqVN0FcMf+nQ\nqTJt\r\n=jWzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxYSOYpVHjSgPQoFLuBKMBnQL+/smRJ4rEgpINrqq4LQIgb5F1CaeXhdzgWo8GMXy8e/yMmWJ9fo02oHjXaiYxt40="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190826010039_1566781417674_0.9392534504920016"},"_hasShrinkwrap":false},"5.0.0-master.20190826082455":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190826082455","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"880e7659dfbac40245afd45a8afe6f471852af5f","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190826082455","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-T/Lms8g8DLmInM8OlnfnhLJtGRcIbLfXSktbWjSEThmGJZ4coHbw+556ln84Pax9RBFst9hcUEl9ltv4wKxtVQ==","shasum":"7ab0a70e11ab82cb1c7d9f9f72ec77c47097da3f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190826082455.tgz","fileCount":119,"unpackedSize":2139635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdY5feCRA9TVsSAnZWagAAQ7sP/2a+1+bfYfCO1paZi6vD\nl51oMue6pZJlmYcFKPi3kyPAN1LvU7kbZJF4NiFb2htOs1fWlJCOLU1MwAZf\ne2MMq2IvZo61194XwhFVnKIHDaicLoiEy27SjrykeHzso4x6ELWO/HnGi0iA\n/m5Rc5MHJ2D+IYq1NUj/OiAUUgdWeogy0PG1TXboSeYhPBWzfGvoaYldl7RL\nlJhOg9+lP9wsFowIiTmwF7Iz39FyKnTHxyAALe3cgHoQdvuOxD7Si3I2shqL\nbnY5PeHkw+7RmsgfVWsGwCJpm/z7xxTIEucSgD9twhohT5qPwfLUFaKjWDVv\n0sJbeVQW8qIjefFyOSQlvQx9DArc1T0Cx5LZrmlOWiSdz0fzZazuhgbH6jb4\nx4Y9R0gUtqj3h2AaIJ7oNVNz8ez0mHq6FHsX0407+q+8NQuOzFSfiznVX1jt\niig6/qwo719Y1RGKGcpzg1GbQfqCv2t43usR4X+cEHNyvcFXojTGH7l0uxuU\nhUcAAXZdT0NvKdhPpL1EoCpTy9ycweae8HQrHjPn0Ooyh6M/3qBShfCtRWXD\nLIH6+UdwQ+Rsf1t4t+H2nhxDMMSdEXpu6nZXi6fg0VsQeKBVGYWIb/y+omCe\nWdGij+RY1/vhOTAMGNyYZwTGnPhhdenTbvdFrnmUkSlzgYbnQH5MO+rRlhED\nROUm\r\n=MoDy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRyrtn0J8aPqtxHS6Iuk02aBHTE7MTTIKvYbWACluGmAIhANTCjh7yZzjm5RUhwaVPEl6bpGrXruS44bxXlZZE2clu"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190826082455_1566808029267_0.31866628343657166"},"_hasShrinkwrap":false},"5.0.0-master.20190826234017":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190826234017","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"40966b9fd89532b25491ef723c4e6e9c195330ea","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190826234017","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-RbV+6wOv5UVPbod+d6GaQK8FJYkFm037tPeW9QS8foXl8j+CFt8DI7q7jh1GrHWee6AxqapD7/HMtr2DWeyvtQ==","shasum":"ad0a68d08c454a8800ade646386ccdf6a930185e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190826234017.tgz","fileCount":119,"unpackedSize":2139636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZG53CRA9TVsSAnZWagAAIc4P/1azv7M1ZxPTCt5Wu4sp\nT3FjPEiQR+mk6i7wyx0jfudST05idk9ch2B3Cfr4vg7Mb+O9yUvAtSk8uSJR\nw+nYvOEpm+JqbRkhMT61wKVYLpyQfvI21cFX1E99k6tbjHIG/PgrJ/2hf4/l\n9ULzILICUMwfp0Yjhf8S45FG94g9Xy+GEk+DQzo+V+673bljwjCxjs8rXwhj\n89ZRDWE4kQY6TKDFbdmr8qI1ewR9bazn0H3DgIXWpkj30GD5+IZdDJpr4Md2\nTD6ZnuGHrZbr9TOlmkdpx1Xrw7gyNc4Ie0mpYtOc1us2OwuvabWbPoEyK5Ma\nb5nMUhsdyjJzJwpOaoASDZZoNRVI8JATtKPygy3PPp9cNZA1Z9xVBhsfTgeI\nJ61PlLu+kDbi7Z7JKc2NYkb3BI/FuyBBirDDBN//B/IMV4EcxdM9byJoaKeE\nz7QZoKaA+DcQDmcvb+1xz9QGTtx9ZuQzohCx19nmFYdnMdDaIMZqQtVqXLLU\nuGWyfBmiQvUP7UHpwPula8JZLNK/pzGvFjTG2TsuPsbQjRqvvdDMxVtKLn6Q\nX0d/E0mCMPyRxdrs0xGCbsZKy/vSbrCJQpy0RLgbMiu8i88nJQE8c7+yd07a\nZXV4sCfr1yJTZ5KxkY7jlJtbTvIrR8L0oQiaZEpYd4T3sz6QNdfDudWHv3oC\nRn4y\r\n=/uC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwXti7GEadfLkp3ZitrzVRNeXCdxGuc3xgI0NZINKPPgIgF+DQU9b/SfSNbEEqd64jc6zIqJndhnUkLC06gLpMFRk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190826234017_1566862966843_0.3373131606525819"},"_hasShrinkwrap":false},"5.0.0-master.20190827084147":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827084147","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"565ffab15a98e2b9319e55df7820a16e14f1e2a1","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827084147","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-02V0f7QZPG8n+rkynAxKB29VcgX3IfrhnhKd05L1lmk9q8ONHwnLDyjz3rnNAPUWxDZ2iK1ENB7AHsCC2ouprw==","shasum":"b70040adf0fec8d9c8908ca3767dfee68f1f7741","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827084147.tgz","fileCount":119,"unpackedSize":2140322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZO1ICRA9TVsSAnZWagAAZBwP/2Yx3D81sopklDqw1Ukw\nz4YQoFFjyhFN90IIipBB6iY9mu+CQShV7NC/jKsJmRfcVwE+c90QmfkIofx0\nF3J4fVLdhAc/L8F2WQ2D73RgKDw6u+IfrC7q4ED/YEoXxSHlLs1ZP5mJcas2\naJV/0uKFitEqqTbopjAGsBvFVttUCMnRkp142RjZwMEUNaEklgT+5Dceg71a\nvnmrfIOoICyVC0zq+hn9LfZVtvkL8UAaWlR/hD+xMzOEH5FIXMuPrVCj1mXz\ni7cfHhnzSqC73KdrN4QkxRYnbU8kgBHNE5bU9PTENGTlkHwq8NJoqGQ7TBHU\nAZ86yemNN9fEYl7TbdNPR+D21gsZJKOPbgNcd9CQlR3mVgwHPWbYwgc4ZbIM\n80hUsEelB0dZr+WbCFxNSRXZELNvQV1ROb2fda8HVpXitgloj+xX7VoNtpo1\ntXQUvVj4VU0SAaRZexFM402xgq1k60hx8vc3w9jfve4V9cf2wFNfkcvzf1G5\nGNvt3Ib39lZsyCUE+0HmkTXtF6vkU1+IPCZkLcsarX/XSwjeko3YK4LnvNa4\nYQBdKxpNk26MEfYNZboYKsm6pYeWD4cWdtHinSs3EL+6uEz1JUdUDY36gujz\nKccWgOlcsSqSWBgRFPX/cdCYZAIjX6ri791uIBHYj0jADPJIZr3z249M02zj\n0z9A\r\n=c67N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCROcKbogoii3oPR6oK/Y3GUjQyjIwD02qI7YHfXZUn5QIgfHLpQVJF4SjDGiTiAmxSZ7G9YkeMwChkrSSnaJLu8kU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827084147_1566895431871_0.010168667959683075"},"_hasShrinkwrap":false},"5.0.0-master.20190827103907":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827103907","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"1.6.2-master.20190821200521","@atomist/sdm-core":"^1.6.1","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e73927df29283f631d5b7c583ee1a3889a77e93b","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827103907","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-8luVmBbao8S6szcHxufQYBrY1w5Tk4Fsqf2TVDC4hjA5CRS4dSD1Xxk2k7mEEmCSVOVCaDq6q2U/XSo+TARQLQ==","shasum":"819f0fce403ec850316233ddba7a27f2111cd323","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827103907.tgz","fileCount":119,"unpackedSize":2140187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZQj1CRA9TVsSAnZWagAApZ0P/1ifJii2qgLK/qTu7XJ1\nvfBEYaSOJOQx3kobfhJr1OLVUEgR6nKI4H68zIqBUa9zjgFeWKYK/mSt6Uyf\nq5ohBN2Zy4ezDTsy8Ke5bt95v3gcC8OiJyno11ocuzhpbut/VzAYPd90Kn0k\nyjFE/gR9o117rAJPbNaogBUNDpKVTkYWRwHCCMwaoy9MaNXbck29dyZNFNwQ\ngLfAC3mG+v6PUptubx+27BIakCoI2jIH+64J0SPeblsC5bCViER/fDnRyTnQ\n26VwPymRlUwY2CBU/z8ziOu2WEjE38qZupEkJBJOHZRO/DX00wSoh4f1Vs34\nC0oE3BSNZfeRKtse+WI9if5KyuqUwzzWucXlctEDz2K3EROrXHnVA1NgYYOs\n/N+SVUFK/5/smKc96qrqRfOsnGx2fnqdqSas0XuyTtRYOdzfkyjrNgGVI0fW\nh5pFPgxdRvfUSV8Q6eNx47hYeRhAvdySQPGJ17MjMTJJziJLlMIMRQuQxZ/5\nsrJ0D3+8PXUPOStbwo9g9VvfNp9U+szccuWm3Dvhx1OwUl0KURDzhd0utz5c\nKcwESqka1DlhJV7UkAT3HdF3YbZ3lfANy8KqbkdYWHhySmB7ho3uhFpAwdbg\nI3lqxTNr2At8Fnp0TOdruuvaZqJ7E1mdzsqhBqhtOqZXgvEDiDAJtpWRfG0h\nXZrX\r\n=54JB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMkJK3Fa3zHaeW67gjBKA3t5HdKch1fHwG4e2z3rZE4gIhAP4lTd8GHRKApbkfe3cO+9B+WztCMWMKuPOlA5pfE2m+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827103907_1566902516323_0.2830870168915087"},"_hasShrinkwrap":false},"5.0.0-master.20190827163810":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827163810","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190824124708","@atomist/sdm-core":"1.6.2-master.20190822002319","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5089fc51e1688535972f0b309058d7118ce44c12","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827163810","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-5GxElZy27UtmVCpQsUdNzgwMHYQ0bZoH59mICX3rjHCAosXT8mvSRFrfKYWkp/b6J+TwmtJgeMP/OaSmZtJbDQ==","shasum":"b41b56f1e1e298de0ac43a1660d4a58dfb0dc4af","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827163810.tgz","fileCount":119,"unpackedSize":2140044,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZV0ZCRA9TVsSAnZWagAA1P4QAKS6v/7/aMEcr9zylLEM\nMMejb+aKY/6ZggjzbrB+wSmJjMtI4J8ossHk85O08fIiNuX98Ic9MW6yWVfE\nSvTSb1l79W+YJcBUFfCLYHDed1vnWg5rol6By9QZSaTgFHg0JWS4xxES1ERh\n5COts5VMVeQvl9gFMmsTgYu5H1Gg80d1wFPrFq1r2zUARxaDFyJAtSc3UvLW\n7pU2mhAUZiEgIo+XN2TfHSEG+jTDrh2ZPTbrGMCR/0x1mrp/yUTes39/4DPr\n80GeYHPO+RyH2iateN23Mg3Y08LoAsvN+pdjo/2nn0bSkQUoOKynjmI4f24Z\nTspSojTskhMVQChsrgsYNhKBt9Ri+T4G4JmPZLACJRJYgqqDwLxnIvh/wcpV\nfC/iFyOMChOM/w/fnBnf9yosHS5dmBEkXw14ndLzKI7//mlza02SR2EPPAcX\nNBy7E29XWBNjN3d2ktCyqTnVFq/56nbv2hg0crn/iZGd8Z25tC+ZFmbv97WV\nz8SPAXzBwFQ7wKuOdsvZuPr1lJpNVWOBckwPK2t+7KnQcK3PHEOo2GMOHgYx\n5sOxEp4OmsuqDjZg7iWZQGI1MDg4ThVxqnBq+srCskt18w+rzUyUa+hTQlFb\nFX9XQJeLfsuAptg+ikMLnfVaRnvfLssLg7svZbYGhnuKmjMrBv6hTRF97bLI\n9Ijs\r\n=R87m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVO1+Eczbz4XGOJUOcAAWUbUyEgW8AWc0fz9GXkfF8LgIhAOV7qJenCF4TWFef9NnEqn/J3ZZE/L3LiYgtWhI05biY"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827163810_1566924056428_0.7463230689720002"},"_hasShrinkwrap":false},"5.0.0-master.20190827183320":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827183320","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827182350","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"df022cef76817bc2af37b6db286cd47cb3d1231f","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827183320","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-4Fz4TzH9ffNCTHhUd6lt/pWlSDLeMcoCSHKSCxUdkhUdqgZbm9BFEnMhofNZ5vc7OX1gSx3fOhaB9LTxRZbIiQ==","shasum":"17e0d1d3566d0fd06a40551631ee897c3fe5309f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827183320.tgz","fileCount":119,"unpackedSize":2140195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZXf+CRA9TVsSAnZWagAA6AIP/2JWR6x02hvFUjTeA1Z0\ngYBoEyCxwejJeEZsOw+hEmJwXi77qS0bhVntRb8SMGRKzsgyv6Tv9nOTD82b\ngnRXyM82LZp5e0XJivK3pWJpAM8eIJkk35A9cy7oX2i9DiO4vY5a/OmXcu5Q\nOqYsPhhgJ3Lie7LporRh+TfZXbSsKtJGGZ0TO2Ksw+vf9ahoIlwEfJ1Pa2iu\nCpihWcL1dLJSQD8r5LF2E+ALAekJNe0juXVktYaO++XaCcF9O3M42AoQoluA\n7CrOrBzeIs7wuvOTJKshupYzVO+tsoLy+DpP6S2BHyOv9m5sliioXstsktOH\nvJ/iRryePO80IONya9+w7zTkgOnv21MNjYAwYlbLPkCK4LBsC05qM9MBR9j0\nTeD4d7LXQgcdwgS7BlK7TeZODJRYg19g+x2v8ED1GNx6qxTIYjtXgecJuThq\nSLpk9foKJr48Wq+f6WtEm/ujjMzqfZq9xWk6XG+2FgaROcjzq0lnH9/Yu9r+\nupfNUMBxXI4VvB4YUwlSQ3ujlJChgca/a3O1bC99TPQWhzNMuZxXIsdlP6A7\nMyRZlovNUPWQLpnFX4c7JeeqwpAETfJGwxZ5EExIPncoLMV6nf9Zz0+2OxHt\nCSwFEcHxk9E2MsFk4JtuGpQt4dSsnXrh4K3rSxY6dbZ546ViU3i3ISD89TFp\n9J/D\r\n=OJjo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3FY1jYIYypAK68da6vr7FntqJ8n4ymUk4YU2yGbHuTQIhAMcHw2AsZF9GgxOhiupxjQgvW6rNQq0wx2JX3K87H8AX"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827183320_1566930941507_0.5221745893509602"},"_hasShrinkwrap":false},"5.0.0-master.20190827183529":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827183529","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827182350","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"df022cef76817bc2af37b6db286cd47cb3d1231f","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827183529","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-XzWW6iuPmO7xwupu6AYAYRtsAZKSo74XVf6zT3jclHjQGMbZsJAMe22EBwKBZuEF4zKcstW/2+EyZHZkOxE19A==","shasum":"d0d82b34c17e8e0fac2137e413d64a904f318434","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827183529.tgz","fileCount":119,"unpackedSize":2140195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZXiCCRA9TVsSAnZWagAA0D8P/2KwKLO0J5m7bd3GoDWN\nWlhXwAK3lmZLWRqyhoD/lmHRnpAFhmHtLGPZZzraaKR1sH+mXW7qmOuPcOr+\nOBaapsizVzj3h0Ub6Mb5ws4XvzugalsppngnO2/L73j3ZnGL7WN1iEtPtoSv\nlVGCdxaoVY4or8qM2H/sVUxlUh6jK5AzasT14rZYdBCVShwtctaGP0r039Q1\n+hX/H1jJSmC5daFSAdsBHBN8/P4k2YaxUC85ghpOFZIFEL9jwqjQn3sFcunD\nH2oOM92LCzIZYcu7xys38llo5MaTEXN1TnlR4lwauRxLmCKidb93hkLA98Pf\nRUtI+MVTsbaq63B3MYIBxOw61MFgHVE9gujnmJwr4DDpCWh48mL0q27qtyHG\nRJLengVpsfPFr9QTIt86RDs6lV0dOe9MyZgIRRYlzdtK91792p7k9co2awKe\nl+ld5dx7EpLihQdX+tEej1fvR19CdxF/8TpkMIEjtqzpKIn+MExhVfRsAAi5\nvccSCfUbVyYzl5++p9OsDLp/q6wwur/TvLt5yrMqVXd4kxD8ZpMO+OS9HQEn\noyj2AsPJSCQDNXXp+jqG0SnSpMcRLvJrdCCFB6zR+HkiplE8elfRs7mNdic5\nXFS0mpK8Zjt4CRxk8aLB/8L5hUgC647iKcz0TNNi5EYzE4QItCQFrIDbdPFZ\nJuRW\r\n=50dA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMTSRIm+uzvNI3GvDMdnQZbP5AqcBK63DFQxLKOPlpHwIgGlHXK4xjqwPu9msIYvbdSApt7iXcOvYj5/wc9TFBhVM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827183529_1566931073694_0.6011782272435404"},"_hasShrinkwrap":false},"5.0.0-master.20190827193312":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827193312","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827182350","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c7920ff06ba5fb0685245fd8da51529ba246a522","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827193312","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-FUoSo3cmtzlesmgYAmPZeJyhd2jdzinfR/sAxpX6NuLOz2CAAGeFuObatyCZqAdc0Glag2+woa6HphB/akStzw==","shasum":"445ea21e46a26a6e96da08b95349df353be989e6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827193312.tgz","fileCount":119,"unpackedSize":2141314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZYYBCRA9TVsSAnZWagAANCUP/RcoJsJ3g2nzr9zTyYwV\neJpa6bwoJKV/5RpZEzezmfdg0QkTB7GpE0y48JxKLkNBS/p5xeQso1NQbR8v\nHa4uSc40ExsuNZe4jRadEbhsE7MeDYPx1E8ohYecIb17b0wwtinsEQ5c2muO\nY29DrJcnaPYrM/EJESc10iAJ9xewfHDAEqULfz3rgXOSEmARDdzAE00DK/ye\nKxbBoxD+E9LfdfTYSAZWit1sa6rPRGhfHm1QZgQadz7/bMFuuOLiosSPnlzt\nvcyljEK62dIs/kvbBmJOdUIGimem/+C4X8iMCERDEu+xW1Hqrx4eLgrws4se\nEKV0t4RdzIOlAwDw426Yz8LSjTvMktFCPvwzAbfXyvNrzlvZ0yB/9AhqCPYD\n6MNR8t4qsuklJ06BphuM76mD0jMJxqN5Q81jz0c3QSf1D1xW+k+feo1UX64Z\nHv3DjiSEX8SMPUvvKKcWbF1AGYyZ4ORdY6As1bPGwYZWumz6M70OvQnDsIh+\nwtNVM4zpeEBECJ42/y0e6rgjg2FP0DULEdi6Q5+X3bf5klTqMsswxY5WwnWM\nDs+B6u0eKo6FcfwjaZGoObRbvoZ15W2vOpbbyQfieJ0bFF1dNSvOk76RY+S5\ngEY7/uSB4eBcGXTDrrCRGuZehsfK5+aWXVyHH/QN+KN8/pFAD6JR1ZJJIK7d\nLnSY\r\n=nxR/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDD7xseE5Vc1SIVhDtvRMQ3HRPZCeXjQasoUcAGcQLxdgIhAL97r8T8vMO+YqK7TOswqKFSUtqVMgGVpK+eouqsXDlF"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827193312_1566934528487_0.8289438948318917"},"_hasShrinkwrap":false},"5.0.0-master.20190827220149":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827220149","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827182350","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f487daea079961e287fbe5018b5f6d325ec564d8","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827220149","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-ttSsKWYK5Kl3gHF7exWWmmI+FFZDCJW1D5IEvfYME7Xqq+jh91Fqh+jjFeRJYzJIC3XsRhwemX0wetp2gcPR6Q==","shasum":"47a577772c3e0cda47767b3af32ed0942bf54d77","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827220149.tgz","fileCount":119,"unpackedSize":2141500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZajdCRA9TVsSAnZWagAANXUP/Ap64BbXaSSR1QblJ5eL\n9ZGiUyWFOA1AEhZYfVa+XTomOar3EyoZorLzaW3AxvNAqy8faZRQRtk/LiCJ\nfETif/kKjmjeOWL6VHQhAaJ2XhDJOz3Mrj7afu2zRy6cP35NsnAsln8HAM6m\nMuWmFa5ynWjW2KwhFnEYxd8tym+c9dM2eCWnou4x5GbafQFXDVV5Bo1Lc5c9\nQb+VVO+YOIbByon2aU8JY/52fHk9TBWcGhRlWU4+mXiGW70J7Xfltd2gxeNo\nwZCuyHH2hnjdzdjE8P9rWYTDgk53Fi8RgWzQaB/fXfAXca1SmzzD5qktUrjv\n7cjwuVGz5YarS5tIgDu7zMTsJs0R0iW9LyByR50cTS52FYv/yhYMF/p6t0il\n5YGn7cpmReUwHaMp3Tl0MuM0OMKz8rCQgNsPghetwEmimMSdcUptKZaWP/jt\nlCnPPxKn0wpzVHRm2COofKA0NxY0Zx9RciHy3IKzVx5imqBPLTv16fU7DmWP\ns+DlJrJYm1iYrhuVApNGZFgDeiLA+zQenoTPYCD7JyfJQD5Hx/1ZzqYK5iuo\n0NiwIAWgMNg9t0M8jkBS3xltbRRFfeF9xp8A7Ardhr7UjBFeVrVM4MGyW6/d\n0mMjsYd5fq/EXJ2FmUXxFdbfgTf3ByWRCxOd/VIrkiYfW99iWRQe3cmhH2t1\nj1yX\r\n=YixP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICI4GTu3O0sltGZ7O/BI3DjiOB5Lt4pXhAyIMw+TVFEsAiEAjJ1eGf4Rf4qMaNaUg/e4+zzmoIo9qbDd4sBZmEhgZlU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827220149_1566943452397_0.43995621497060866"},"_hasShrinkwrap":false},"5.0.0-master.20190827220717":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190827220717","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7eb19aaa3c7f17eea4e0e5169ece1b4c7d150b55","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190827220717","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-39FSVyEQ0jLmP3ouqhO3CQt94tR6+cA7ORZssqnF2nNAHWgTye98NL7IRWBJ0xFWHdRsfaCGxt5TyFQCvdXN2w==","shasum":"ce00070cad61f11aeefaa1305d4b32664010d1f0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190827220717.tgz","fileCount":119,"unpackedSize":2141866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZaomCRA9TVsSAnZWagAAHpgQAI6baAt6c/U1WN2mUTqU\nSRBDEs6uEreCmhWZifqPFYcoolY/6xbNOYsQwmVbDFtErXRXoSPufhPrWIpb\nplqsXhLJsM0bTyMk0qEU+Z9M2vCVlmPrr96XkAy9ADFe7kCRAgzN2elUZiwp\nUdUxvZNbdeGZmlybd/Y8tcAhXWp0DlbbjnAvkeN6RvVwBLDA4rl+rAEHTEAI\n9tsykcxRGe/4Jn6fSBJ9PfCEWYY6A7VPOvDntC2wSQPeg9ipSZ4sVnftUzMs\nWUghGUBiSFYh+fnkzCT/u3LmvCyVYwh2DkzbMKPhaO1AKtlnGfM3ucKuNqbZ\n9V6a2tsDuDfnsgKenScTy0iPYhyaYE+dMYnbosxo45vRiioK3s5GvxRCrRhY\nqG2eLqd1D8aq4+twHYRsHnMeisqheOzCHnz/fmG/p6FC5d5joM8HPjCrB8mV\ngJS/afCvHpoCOG8X+LBJPtC7aSpAdHJMfMKx1foPYzBTaVDCNS6zG+lCO/cu\noRjSbtGlH6juKUCBYP1Yi6g7TUnVgtmfhb48BauRNOpf9xYMbwH0nvVinZoK\nZv4XuAcNWQEUi61Af7qWPLY/hjqLIQBrFgMG/cX6ncFa/0WSwVlAWrVospcK\nhO7PQHqXonlxsViVSaMFBaPkuqrSAF6nhx0ZIWQSeX6Xyi8thaJlWYoUlkPl\nIfeF\r\n=VdsP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrBzbw+kYC2GjP5fLySiiA3Ek3h3wzuklE5Uf6ApWT/gIgbtkY8gDPxs7Smnpa4J6PDqQZCss+lidwHH0wrIyC7j0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190827220717_1566943782159_0.04975781261055845"},"_hasShrinkwrap":false},"5.0.0-master.20190828075322":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190828075322","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"36eeaf679beddf9ae3ab2f980de726c0f35612cd","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190828075322","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-X/LorvHwIKZiR4MUZkUKk8RewlKz2XO1I7V3SsPvKWmmcZPBJHrFRZyuGdJXMsaS2pefKw3JZPrTMwl24LviyA==","shasum":"7ed9ae4366461c0704883105635dad3d07372a78","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190828075322.tgz","fileCount":119,"unpackedSize":2141891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZjO5CRA9TVsSAnZWagAAspIP/1zWoWkIMGDU8j0FrpRr\n3M0oLcnKWMCIFOy0uXgI3S6o03/iNnvzk1eCCcfUpddLyDdGpp+ABLSL1e0s\nrbo1OzewSWXLEHnO7Q9GpR8yfv/Xch4ntp6veurqrfqLLGFsZEzrufZzqBXH\nHbCSDFBlFpHkXmYN73pBWKolT3haCmUQLmBRX3p2REkB9w6eUf47YQ5MKAOX\nFyX8hARaKEmCvr4IqeZgfzK3t+SV26D/3WmOaTS1kDncrdoOVYovEqatG3Ye\nFrxcp8DD8ZFyhyPZanZBA6kTivJwjz+a8VgPFS9qD3a3EC3KcqEVxsqFeiCb\naaFcVyPx8ML7u0wQRquAHZlLuAgvp8FNDPDDUrpYXYIvUUwrncbTyoXtER0E\nFmaPKw/Plkh9W9092OrgrY2NGRQbF/M0KGq44nqGIZRdwA8MUGEhMVPnM9y5\npHNcK5PswvTDvsdL6Z4SyjiMbYPFMHe/j4wp+EMJMNUu17Aqi4/4fyAWgXhI\nmVw1NhXdRRYLovUlKCii5fTX07biJEz8+exWobMt/EN6HQY4QG2GZ4+S/j9S\nS3sG9+82JdW3s1a62XvqEZ5KhT8ZSU0L0pn8xur2DCf1dSfrEgF8YeMXNpfd\n8VAY/5QqB/eOfOpgcPj7l8x4t1LUzhdBU/PLTXK/lNPeTBVPVhbtztWIyDi0\nuccL\r\n=Vlcu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICyz+7CjHa06PDUJL9t/jr58Pa4BMP6vFqdGgVWHlrPeAiEAknP628iZT2WdRcEqs0Wx/CVk6HLgYJt8ZpNS8v5WLhU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190828075322_1566979000976_0.09035910448210682"},"_hasShrinkwrap":false},"5.0.0-master.20190828102730":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190828102730","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ae37ce59cba0daaacefa186243f03293ca1ef391","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190828102730","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-rNmJz+OdjkDuh+X4TpMs+kXUIRsvCO+M9yNOfA9/Rkbwi2nTNAno762hs44JdtIemgVzicQF3QEj/ExV8oIPiQ==","shasum":"901a5f576d3466258d05628dfd708e00392756e6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190828102730.tgz","fileCount":119,"unpackedSize":2141896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZlfsCRA9TVsSAnZWagAAg8IP/Anm5jgJvpPal+BkDVGs\nkUiOB/7fuOg/kJfL8S/meRqPCBAwHrN5zVad9Jb6tZ51AsbreufJVjhHCseD\ngDD4GS9AsZYVlayIWd/rWnwSInHDfPBOSN6vcgIUH5ANWtZpSpmkDgjbtBdE\nXuOPNAi1+1BFn3ZFXKSHC+hsBBMCI9pT+w/9lgECD6fcXTeNqNSWaB0pkvfY\nWKf+fX+Nu0OYNw6n4SXyOcU6tsxkfADoyFKa40XQ8EHTFyvMcjHNgycKvZJy\nt5bO8vC1hOsxwrBEaHbFhtpv0hpbuETRG8le53T7vw1GfKA1OLeR19LdC/Q0\nx9hhVaOsiksOj5K+rkI4WbeSE8+/xrOeVfgDGMDywOtV2VNWue3NWcL/odgR\nUk/IdJU+vEMZ8BjEM9GFn+u6neBVDQAfuF/F2ZVcNMeCTXbczOJBzFWoRQku\n7LIKNCjj8LQDTmzU57MZIOwOJr7NySbap4yuTeUiRDD29fNBo1Eoggj0hq55\n7YCPFtUY//ooCIMBES7gk4eaJNu0WbIzYW6QLuehJyvo6bXUIVA7hzDQEe3X\nCwoWw6YMgnp7NTHv6VkkVFjfUl70kGF/QGbiO8Up2wZLbc7aQYIqckxb4dze\nm9vnV1xnS5mzIpt7BI1icxqAxm3NLQoqlxcZlPfd/TQEuJrvBMvyiF1OQ5hM\nwdh2\r\n=uL0u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX9rd7jATJwPRwzyBWtYiaUM+AP3lqHVfrc847ozxtNAIhALG8nCuT8KHkdZfJdabKyfA++rPXHdhVDfIV1TjLCk7q"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190828102730_1566988267823_0.37332790244728"},"_hasShrinkwrap":false},"5.0.0-master.20190829084907":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190829084907","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bb34ca8f322a4103a5d54bb11ac998a70bc190ba","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190829084907","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-uTiTgZdSjNMF0pYyYTcW2xzZ1LjH06/wBeZHsUH0rIoUrOEUMIRQyYkU7hrE9mi2T/NN1TjmGlARPTmqX5vZmQ==","shasum":"13d767b7ab25cf034d03b25b1898cd5f51865fe8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190829084907.tgz","fileCount":119,"unpackedSize":2144545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZ5IsCRA9TVsSAnZWagAAz3YP/0zeMycCrzXb8SykCQd6\nN6I35xcw2NarpooR4F0eBjAXcrWZADi6fF4vcOqA0BV2qLNfSHpA14hzwUtR\nT7godBUaIoMaViI7bDoYe1GZuUsUHF+tggVl2qtzEElpKrqH1t0mygCvrbFw\n/RSvfZbv+j0EeeZ7WC7sYrBWQxdohscXtI3giUXO3hDkvpfrOWwmVTrXS+6c\nteyUrm5Aj83n3LIF4m/VinLffg1B44+sZeWbtpq8oBfq4VSfpXrjDMawlzTV\nlkj5E8R3QIl/6uxdH+96V/Nree+AqR9ieAickvyRpqn9lP8oLWb4mbqANk+U\nMsbBF41i9sARYX+wDaRSlYpSO6Q4Cw1y+Jn3/VYyWcHasiwUTw9BmFfx2qhQ\nTCOWdtzsQ0I5CDFkYCUiugY7oispKCrAjWyKMvFleEK+/R6Db4ZguMaBhyZi\na6ullgx3faSAic2P7dNtASPc7x+WraPMHbApPZAH0KVZ9lurvfEQ48kFJyts\nW5mFRTFMaYSVvXtJMxnOxwZt4tye4EDSNqIZBYYMc+vSeCNiyZcHmS73sS2T\nmpcZLfixgqLbe+MaxdKKdJ7YSxY5tFyrTXJDYt+6qbB6FPzjBuI51lDLZUXS\n3b+CjfQHkETSelRgG+h2AnZVVHx9DVOpgOwlGRBvaMN2k/OgY7jCW1C9U7rr\niNqJ\r\n=kLPj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBLT2Q7zLAjnRJSMmHK+1JOfcK75sQkhqdWtfJjVPBwCAiEApEvb1CNfSwE/cRXu1i2u6JMuTeZDhqZSv4e+9oZzzrE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190829084907_1567068715324_0.2654958954869293"},"_hasShrinkwrap":false},"5.0.0-master.20190829110839":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190829110839","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7643227a2420b3dce1a31c834b0d3c9da98575e9","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190829110839","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-6N0akXcKM7Hmrn5BjlYGTSRGAXWYm+/Y+jQaedVm7pIq5a3Qa6HScFxgiTUQLfpzrm7Vghp2nkvagNVUgBomOg==","shasum":"c2d8bafdb86817ffee2f38216153bbf42e333a4e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190829110839.tgz","fileCount":119,"unpackedSize":2143984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZ7LZCRA9TVsSAnZWagAA6XwP/27OAy4OgDtrh8oJGJC3\nfv7NZaj7eD5h2x20XmyJ2fbFWusZZp3Ii/mFIKIaA+ozIngavL1AAhsRhx7/\nRK76BchDkGbscsDb/oaINiLK2oJL0XZnHN+1WxImZbJxA6V39XR0Qp5pThKk\nSxVFr/xF6C2FZhv7ZTFI6p/KHp27f62DwDDLld+6fs58r1QtXAhYPh9Xqsxi\nZ448xp+xtAMo9t1ydRGxLNu7pRm5zx9QOs+zOT4yrszLeqEJDaltEI9c/m0c\nx5xObWE/Y3X1ftMS5Nier3Pe/3k11f36l01hFiY+JDp+E5XcPRwEf+nznf2I\n/zj+FOlOQCnlxlmZPX496eymcARRHqzL+Llk0f2iUhXegUVKHuNykdISbctD\nac567zvm49SS/OYHTSVnh+Vm84jDX1K7qmfnUqxeLlOF9M+ipTOmAWq5BFMq\n5mD5rAaMvyMrk4M1gNDYqbPQbe2CvhkXcntaG+6biaXC8k8JcfU9LGw0Dwdh\nQgVOjGx+YufwyZogXvWhV+yKN7YHxktriJllGMKndCmtuJBcLa9bz/bGwoYq\nXl6paROZZe6T29rtuCsFp4vDDtWkCuj0XSNWQmlqUI1+nSot0Xf4BWGG5oE+\nQJ9rgWew2/1yij+ydfTCnpdZqJDrYoJfzqB9K8elj5jTUCPZQykw46is0DEo\nrpm1\r\n=P6ud\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6NxBaMQ7pXbxEau5RCdwK1mlRVWREhzyrcoKLC76dQAiARazRDOZv73X9pkgx/HhLSj3WNe8frb0PRBDDXI8868A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190829110839_1567077081202_0.6115505317267238"},"_hasShrinkwrap":false},"5.0.0-master.20190829133639":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190829133639","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dc59b34b96d8ac5c22856ff1f8d14826c5e24264","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190829133639","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-/fvYZgrShMDmi7OryDMgXiM0yIlzrVIJH+MtI72+x3MmyXUVJiN5NhFKrsVKMNUPlmWzlv0QP7tq0EfjS6YccQ==","shasum":"6e73a61ad860566566c097e98137ce692cda79e7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190829133639.tgz","fileCount":119,"unpackedSize":2142751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZ9V8CRA9TVsSAnZWagAA82UP/i6Pz8IfQZBycM4Vbh8a\n0NEyIH8LvG9HfcMUd5mk6bEak/FLfsiTu17PMGZY9c//hfN+DQGXkac4MEvN\ncJP8G/7m3Mdk6pPPPS8LU0fpfDbnsYfYWDS3Z7rfBBGaNNXXBBcXG5GHJ72N\nM2zn32xrl4Jiho8AiMUy9R0+ROQivRA9ihIjRRMLmPkUXKAiAVjGUbA+gWWZ\nfkF+oxqjjiwz1Vf4OsyIhUGPDPpx11vx+9vUtxitfC7jodzFpJ5C6unwE0SV\nnLCUWXZzR29oy6cfiRgOcXPQLTE67UYfGdxx/agW62UI5RBqsUdzqjSknl85\nupqY5BR164olMR0vS6VQcD6PcuOit8uKP6SElW+0J4wJN0Xie28HgKikhdax\n/EsT1ig3XVcejBG1aLbAUJvHn+Nsb3Zw9ykjr8RhwdGHo4GCeqwWiUr9ldmV\n5QBvP42z5kgIm2XnMluwa4gCsUE7NXIJ9KJha0CKCg3lE3UXckUO8ON/iJGx\ncSqAloUllmrPuX6qVk038q3S9Rxzg98a2m1mLJjXVApsQZA5GTxFYSK7/4N6\nGygmCziDCZLs+XO5YYrssOy5L6iofqG95bJz39JhdQXCmpMmJNXIHNxVRZe+\nAl+aRBR4PcKNiIU0lzBMBS0R+f21AYRkTr0rsZV/ETTXfZy/u5hx2pySklA3\nNIna\r\n=582M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6E2R5GIoV+KsDcE2z3Fq7jS3rUJWBcpAlr+YojI+eQAiB9ENVKtnXUyym+2bWAn3a3RiB51xakwPoU/elIc6ob1A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190829133639_1567085947515_0.3863235102695368"},"_hasShrinkwrap":false},"5.0.0-master.20190829154621":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190829154621","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5f2d26d1a40bc9f189d345c6db90782c49357620","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190829154621","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-ujkCXoq+hwgmQnlVW3lJlFHKL8JfU72yMNWAGfXR7o3R4G7Ki50kHwZrQOzXlkjBTc/PXty/lqRaW0eejqMjOw==","shasum":"55c9b177cbc1e2712153ea55413c2d35916a6fe7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190829154621.tgz","fileCount":119,"unpackedSize":2142796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZ/QGCRA9TVsSAnZWagAABZoP/RSLtwssh3A0zNNtO4bs\nNieaR2zoNrYFSREs7Erf4FlRW10TYIg5eB2XwIrX55dNFOvIkv9G9UaHc89F\nm5yjJUHyMGFkKlqp4SbMnogVIHbZrqTJeWif3a+1eZqRiuyV/e2q7kXBR+km\nt/CRD2JOh/XC7ObawAlkPF2orxKYTutnjQpnIesQy0erkhqY+dKP7tUAoQA+\ncZouORfLMJIiMCc8RnaZEdEqMYtKhOugCQjX/UQMZFPjutbRWa7T/XIWzQN8\n21XgKxe3Y5RgHiedIK60vjCyDGbfky0iNbmm1a94qVVfCNzBwEeSQPq6c66+\nZVYQAeYEGqKW3xHlJpBJUxieiKPbq75oC7F2i8xVYhvIo0UML8R33YP6RTl6\nqze18eQuwBy+bHgpAE+eC22aoMDSvAbwO1uy4TVkH/U6UsPK1RRWe1ZE7J8Y\nC5Sew2QNuBiFTNKd93njwdvCfs+kTvQYFuxudOQH8EtLAm59u0o/iBW/9DMz\n0PlPU4cyNrlbElsNiMfpS+3/kb9vS4eu803/qnMOljNsbeuNSo18/GMrZdv3\nsixnbS+xh+TdojVX1BOYlJR0bt9GQgc+iGmkhC3SYo1v5FTow4kYrzBoML3y\nMfxmSK2mm0JcwNvDIF/XOcfzr2JTSbKi8+smLXswS8i8/7uCDh2LOMe/XF0x\ngYMs\r\n=K11L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7vCHMiSmIFrLzph/w9FZ+LRfX2JWBQnIsdKxS2FwjPAiBd1bRRxEX/S0l7p4jJMMpF8uAhAXOecKWW8mF3QIdG0A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190829154621_1567093765798_0.04811686784946101"},"_hasShrinkwrap":false},"5.0.0-master.20190829154948":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190829154948","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bc12bb95e81c50e6d4b455edbce040c9a8e15b90","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190829154948","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-Vp+qDEi4+nTM1W7V6ry2ZdW/r7Wzk+oek2QnOgsW7xjjQZamqtSNLnrUDiPxNZx5+XsIgIz0SKHTp/YuxvA2tw==","shasum":"b8aac2628abc1b9260741ca26fca919a2d744299","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190829154948.tgz","fileCount":119,"unpackedSize":2142771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZ/TRCRA9TVsSAnZWagAA6u0P/2GojCRALkNlJYKmVub9\neQjW4tWOjz1VsduVPstBWT4x/o6438tc+yOf6N9+2l1/bKLBMLvSCn/9pO0i\ncO5++HxHjyB6batC2/gfSShJHyrtlixTcyofmAqGbw9rxIBdZhTT5Ixo0xwK\nfNqywI8pXU9WqF5EfCzf67Pm8zcQ0w4UEx0lh+FLeUaPMnfvqptBFZMRW8BC\nr3TvUtWg/Oe/85Fw7VPI1g1xoRrBNbH9enpY6zC3EuA2RXG9ofUp88cuWYo/\nzhnnjMJAlCwYAuOL5H489tEucY5wyPd2GAXtA7QUC5a8Kv/H0Nm0S48WiLjV\nEkXVV7zZSF8fPX9cTNXMMrCrUCjMIOG9mn8LB7ziUIxIiVF9AX2YhZsRQjEG\naXfHZQLSdeftqq3ho5fLraE06FTXuXS67kLyrW370PdSbM0kOl4T90rq8q/B\nTVfmA+HYZ0hNK+XMlRk2bV51pgj3afDAiXdESlEwW95ylxhUUegN4D14VjI4\nPySpZujLnM5/COv+wM8kJ8AwSc31kXEWV4FguMZQkOpxW24vdOKKCb25Os7M\nUBB4iN2dGMKMLOud1pm4OIcV8KZroD7npCbOUGCr4NoDzasUepdq9uXSb+fF\ny54+ymapmUODKBLAF0QOAFA5zIfZVevbzBuYYFQH5TR8nzcW093Xl2rFVpU6\nL7+q\r\n=Wlwr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv25yrLCJCcmv+xBG3EIlIRKZ0qWdDEj4i8nZkcQHOLAiBr/IjmiwRIb0IV70Vfb0wk+RikAVQKmw3zb0NCUIB3rQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190829154948_1567093968533_0.8974562391946934"},"_hasShrinkwrap":false},"5.0.0-dynamic-aspects.20190830084158":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-dynamic-aspects.20190830084158","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3bfb8a078a22dd527dcc654b60976251e737b879","_id":"@atomist/sdm-pack-fingerprints@5.0.0-dynamic-aspects.20190830084158","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-1bVjQyDPiOUFXezBSNH+rTic57hCPkRWrUfahu+F+o8WEDzT2s5N+auu90RjeOeT+p8sUk7cUHK/hwuTAF4a8w==","shasum":"0cdfdd7e3198a599c1777004fa7811840dabbe33","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-dynamic-aspects.20190830084158.tgz","fileCount":119,"unpackedSize":2144000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaOHmCRA9TVsSAnZWagAAR00P/1f8tkUlDf/wkI34FG7X\n6Ns1YDBkVhFZEPYFv6S0rXiLNZdThNDy3k/wBQkefDmUyPKMvtgR0pp1XQKm\nXL3qFHMeR5ksrVKjeItI6MUTsHNN4ULSiOkJ5Ba6OkmJ2oWfECFqxpYvwJ9R\ng7/CDLEeo2IqVEDZlbna9eI444rt/cJWyS5XGFr/6+Ajrgz2dtga0xKwpjI1\nKLl7mD5zmbS8RilLv1oCHQcEb1pz0IhgbXjep29ERzpBMAzqlD3jIH6vSpvR\nz0SGU67BG7zsRYXm9IcbexXU7eL/A6OKeFNi2/mPmtmBW1Mi25AunwtNQJsE\nDlKr1IW1lYffvAtnloZQhHLj/Nl8VVs7VluJzmZaBdlFwORroCDFU+5m7IrF\nvcp9BJ8GyVFsTnAOJATL4gW1gsAiDo6iEaQa6dbaEMQ2egekfoN4qnOkZNCS\n8gYWo15kUP2CHXZYIWfchhQ4IFeX/ZXfzjUnr4pNOMONWSAnICu8BZ3z2tvh\nUBKbRhYlX7z36DBvtnE80lm8yTZFiopq6FE4Msm/p4rMQxlrxU0rD3g2LThy\ncsfLsh0jViBIg3WWRwibfPuneDrTd1mS4je9ua0nrH1vOJQiYxIg69kWQIbU\nLI+Ut9cZCi721yL9fpBjMUlUJlnzpo/3S4EoDRmYvWV3y9N/Mh5v9qzKEE+v\n1o+p\r\n=WTbb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDs3oWjobLKON0xORPxLclDQx5LSLzeyRhEQGs0WtG+/AiEAktlyXFBsqgwIyjEs6MqEvA+L5J98orzfbwc+CftNu90="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-dynamic-aspects.20190830084158_1567154661348_0.8668557784663762"},"_hasShrinkwrap":false},"5.0.0-dynamic-aspects.20190830084807":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-dynamic-aspects.20190830084807","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"976f187a8028586b5520ec46fdc9e9a7e36ef957","_id":"@atomist/sdm-pack-fingerprints@5.0.0-dynamic-aspects.20190830084807","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-dlL9NkjVE+ck5+keX3zSFW4YoC4tCR7AF2IFGzRDN/JXR5lxMlx16rupx903vRFQclt5icTcTHQL3h4VMzZqXA==","shasum":"4790a5ad192af4277e09564886a63a97d74b4cb8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-dynamic-aspects.20190830084807.tgz","fileCount":119,"unpackedSize":2144016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaONOCRA9TVsSAnZWagAASeYQAJoQxsFQmcIx9f4gEPUF\nBpSGIX6AemUOh58YYESeKcyxn+zGBlDGCVk/Ak9xDHvHh8fkuvjVSXVrPfMU\nrjy5dXYeJ+8duSmOFtPduuei/0eVkksstcXj8mTjYcryHGr9qoumU+3sQ/G4\nGTH3x2GGjFERVMeNfg55KJXF5Rbj8dse2cuFYPefm5heZurfBdGvjbVud2k7\nIkEjqIdxMjXDim+wpRGGBdR+uKmkM7kh+yoObwskiguHBsIRw9kBwwgiQIys\nGJ9Zn54A3JnKQC7/FXgKZxPBkhNR2AstcMI0OwbS/jtltO36w5SY/w9K50cG\nGUT/va2+I+8e1Sj6rm+7lqN3gMZpPq+yzsj929TQpc68hX1r2YvTFgi70IEn\npVKjsquVgicfWRLvkipDw9ECow5SxFZGGxEh08HNA8XC4/MSmuGgPLJANNao\nvDGNK5HWW+MZp37eQB7jIbFePIHoHrFGby0pija7xnJqLwN+e+WJO+XDDp6v\nhsxyq4hO8hOQFqCeC/G2giXHL3UWCqH4/DqSpQJUscUYj2fV+VtCtTZk819G\n/C49uGnz5TKA8jye0z+xQRKcthryJJK1GmnZzNtaRijGGDUQr1OMPLG1LmRz\nWij2XDQNQ0ej4ACitVIzi7xV5lCekMLZn++5X5NN73YUPBPl/Vk1VEhQD1ga\nBk0p\r\n=5LL6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTsPWlZn1Po8THMNManC5OxV9g1S3H4LcJ0NqTqYvdvQIhAKfZwQzBqHbStlTzeLcqU2sOkX+KDjC4Cvvdi6UY3EkM"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-dynamic-aspects.20190830084807_1567155022199_0.9377186879129171"},"_hasShrinkwrap":false},"5.0.0-master.20190830145241":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190830145241","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"337603473af5c291648f20c103d11b8bc2302bf7","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190830145241","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-dgN7JQhFL3p80kndqw9PzPMIjoCfmOpFIWMYQnvk3xVB63UIG05wOmmvEcYZDFVy9OZIBGHSBiXwtGV0nqHl4w==","shasum":"8f911ec583671f04252cef854e1d6fc53f31442f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190830145241.tgz","fileCount":119,"unpackedSize":2143070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaTjNCRA9TVsSAnZWagAAikMQAIve5tUA4D5EAz+xKNcO\nNrY8ou5QPCiCY01CqQOyZcCFgZBoFeWba8IZCIgZzi7s1XSgseRR1gxYPI/D\nYiP++xbB7B5HEMJ+nzzO08AjwYijh+GqlowvjX6kcqhFRXLw2PqwasrazldK\nl1iH6tEIxnMD4EPWMsnSDI22cJS1oz5IREecYJAfQ9Lokkp3Gl31rpF+HTch\nbYlOb1Ydppno+upl5/lDqi7zlQ1/44+WRgdJiWp5hMrz0CKQeWRclJFAOS9s\n9c1o9fTbwor+z9M09lQ6LxvzoxLTWKMXia6I9glLoYHS1xAo+W96SxW1FMG+\nWKG7tY3BmWAVHceWiFI9rFELgeDs1Wur76n3D8dz6a0Psr5t8KxHJr2TcxUt\n+zucBs4SmQtDo8Zzvn9bwQG3Bb8Eq2z9mEDtZpa99tH/U+Nsr4Cx4TiUQ0/f\nxhT/AZtG0GPecJXcTlnYlVWMABsZaDmWiJPchXXja+gXMTiWT/ZbdEO5+f2S\nGXK0RCfEL9eaxkZ0D1P1xkmaA8fM/jJ4pYAPnBzMjnOmzfDasQnRdHKX6o42\nHv1RyjgclGTLFcJ7c+6EMMQQQiXoIUSawvfQGZI44GX0kh0tKANzdCBgESu4\ndLRDGktssjLCQY4uwFRqh6V0ECIQr/cox2t7KXNo5OEGdwkpK9DO/RE+MPKX\njuPC\r\n=VFbb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoJBNQKy7CFYDtb7EW/nsO+LByrbC0UL27ZiIAwI41xAIhALeBdzFPnVeOyS66ENNVDonSuWG5YMx0I8sm/cT0ifZQ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190830145241_1567176908654_0.05196102425399807"},"_hasShrinkwrap":false},"5.0.0-dynamic-aspects.20190830151145":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-dynamic-aspects.20190830151145","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7a03539b3e29d1067b98111a2301d1c43a37b3b4","_id":"@atomist/sdm-pack-fingerprints@5.0.0-dynamic-aspects.20190830151145","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-WOlgc4B2FrpwDYCzmAj0kbYREFiW/AD8bcMIvNGJXAqlvh1/g4lC2e7ZROCesOWEf6jvg0+5PJ5tHtCqrx5ZNg==","shasum":"f41d75b0b6763d124b3d0a2afb31eda449a43aaa","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-dynamic-aspects.20190830151145.tgz","fileCount":119,"unpackedSize":2144315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaT1aCRA9TVsSAnZWagAAMEAP/RZIogbADu4QeNj25rDK\ntmVunbyNkjXYBzOyDoeqczSvXaXwqmjkZAxuSG4ZY+F24M2e6UZqALr5jQ95\nOCKgC0GJRMSv9dpD+K1cL9FPWw9o0BKfPmitj1nlWOrQTyKkAowWvSg4xvxN\nniMtjhk9VSLBsdewgGByhdsn5+7Nx30IcXP6YJz+0yruSsrlOBZ0PEjkTA1V\nGqWfOD/s6N5R5NVQ6/RzXFs1D1m2/fPxbEcWOSmBOqbWZcKjp8u0l7RXyDRP\n+Mky17FBSsdUtC2TXmTTBSQPb3ZWevz3JHawmrFR6sj5HvMnJamQbs9/BrJ9\nMcUufoteWdf1C044/SaSePyIR6TAQPpCEROlfDDrVIpi6MUvKVAvjU5SOWCz\nMmtIascSGkKxVX0VpebUQctivlQEfUKwH2AXGZoThbg9wWkFhkDSsSCZAvOd\nrY7H/jh4oYJMmpKVLmVhgsfBLYarM9Y0N0QrJvfyCmL8aUjnygL/E1+qYIIh\nUGa/dFeQCYJH3zofgxsTZEsLQtmYH3Sjv5WdvOacfwqebWWHsLJDl8LtzE98\nEINCVntIdiEb9a6oJlLy2ctuTDMX3gBY+3FkQk3GhYmM/jqB2Jjr0c0Zu0nU\nWtLNfUZr2JaSYplRndpxs4khJ7IZ2zuHxLDoTSFhJ14ljCaf7u2xnmOZ+B+0\nP45l\r\n=54fR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDHp0gljAhBKb171AujO2bspCs7L6Z9HZZbMbDdPwsJRAiAprieguMIVD3nVyA5UQMX2u2mmFuH+py3xXODy//DtCg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-dynamic-aspects.20190830151145_1567178073892_0.6679134908057718"},"_hasShrinkwrap":false},"5.0.0-master.20190903060131":{"name":"@atomist/sdm-pack-fingerprints","version":"5.0.0-master.20190903060131","description":"an Atomist SDM Extension Pack for fingerprinting code","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"keywords":["atomist","automation","sdm","clojure","fingerprints"],"homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"dependencies":{"@atomist/clj-editors":"0.8.2-master.20190816115246","@atomist/slack-messages":"^1.1.1","@cljs-oss/module-deps":"^1.1.1","lodash":"^4.17.15"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1"},"devDependencies":{"@atomist/automation-client":"1.6.3-master.20190827162443","@atomist/sdm":"1.6.2-master.20190827210741","@atomist/sdm-core":"1.6.2-master.20190827182244","@types/lodash":"^4.14.136","@types/mocha":"^5.2.7","@types/node":"^12.6.1","@types/power-assert":"^1.5.0","@types/tmp":"^0.1.0","espower-typescript":"^9.0.2","mocha":"^6.1.4","npm-run-all":"^4.1.5","power-assert":"^1.6.1","prettier":"^1.18.2","rimraf":"^2.6.3","supervisor":"^0.12.0","tmp-promise":"^2.0.2","ts-node":"8.3.0","tslint":"^5.18.0","typedoc":"^0.15.0","typescript":"^3.5.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"npm-run-all gql:gen compile:ts test lint doc","clean":"npm-run-all clean:compile clean:doc clean:run","compile":"npm-run-all gql:gen compile:ts","clean:compile":"rimraf git-info.json build \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"npm-run-all clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","compile:ts":"tsc --project .","fmt":"tsfmt --replace","fmt:gql":"prettier --write \"**/*.graphql\"","git:info":"atm-git-info","gql:copy":"copyfiles \"./src/**/*.graphql\" build","gql:gen":"atm-gql-gen","doc":"typedoc --mode modules --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","lint":"tslint --format verbose --project . --exclude \"{build,node_modules}/**\" --exclude \"**/*.d.ts\" \"**/*.ts\"","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":"9.x.x","npm":"5.x.x"},"readme":"# @atomist/sdm-pack-fingerprints\n\n[![atomist sdm goals](http://badge.atomist.com/T29E48P34/atomist/sdm-pack-fingerprints/04e080df-3333-4783-82d3-a4c76637827b)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-fingerprints.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-fingerprints)\n\n[Atomist][atomist] software delivery machine (SDM) extension pack\nproviding fingerprinting support.\n\nSee the [Atomist documentation][atomist-doc] for more information on\nwhat SDMs are and what they can do for you using the Atomist API for\nsoftware.\n\n[atomist-doc]: https://docs.atomist.com/ (Atomist Documentation)\n\n## Features\n\nThis pack sets a goal to monitor all git pushes and trackes the following aspects:\n\n* leiningen `project.clj` files are monitored for updates to library dependencies and project version.\n* maven `pom.xml` files are monitored for updates to maven library dependencies and version coordinates.\n* npm `package.json` files are monitored for updates to module dependencies and package version changes.\n\nThis monitoring happens computing a set of fingerprints on every commit.  The fingerprints that are computed\ndepend on the type of project.  We currently compute fingerprints for maven, clojure, and npm projects.\n\n* npm-project-deps, clojure-project-deps, and maven-project-deps\n* npm-project-coordinates, clojure-project-coordinates, maven-project-coordinates\n\nWhen a new fingerprint is computed, we can drive interesting behaviors such as:\n\n* check whether a library is up to date with a set of team-wide goals and offer to push a PR if not\n* check whether a new version of a library is available and check whether consumers need to update to this new version\n\n## Usage\n\nMake the following updates to your machine:\n\n1. Add the imports and create a Goal to represent dependency fingerprinting\n\n```\nimport { fingerprintSupport } from \"@atomist/sdm-pack-fingerprints\";\nimport { Fingerprint } from \"@atomist/sdm\";\n\n// create a goal to fingerprint all new Pushes\nexport FingerprintGoal = new Fingerprint();\n```\n\n2. Enable the `FingerprintGoal` for some push rules.  Normally, this is done as part of creating your machine:\n\n```ts\n    // there will usually be more than one Push rule here\n    const sdm = createSoftwareDeliveryMachine({\n            ...config\n        },\n        whenPushSatisfies(IsLein)\n            .itMeans(\"fingerprint a clojure project\")\n            .setGoals(FingerprintGoal));\n\n```\n\n3.  Add the pack to your new `sdm` definition:\n\nThere'll be some new imports:\n\n```ts\nimport {\n    fingerprintSupport,\n    forFingerprints,\n    renderDiffSnippet,\n    depsFingerprints,\n    logbackFingerprints,\n    renderData,\n    applyFingerprint,\n    FP,\n} from \"@atomist/sdm-pack-fingerprints\";\n\n```\n\nand then you'll have to add the extension pack to your machine definition:\n\n```ts\n    // add this pack to your SDM\n    sdm.addExtensionPacks(\n        fingerprintSupport(\n            FingerprintGoal,\n            async (p: GitProject) => {\n                // COMPUTE fingerprints: called on every Push\n                return depsFingerprints(p.baseDir);\n            },\n            async (p: GitProject, fp: FP) => {\n                // APPLY fingerprint to Project (currently only through user actions in chat)\n                return applyFingerprint(p.baseDir, fp);\n            },\n            {\n                selector: forFingerprints(\"backpack-react-scripts\"),\n                handler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (even if it hasn't changed in this push)\n                    return checkFingerprintTargets(ctx, diff);\n                },\n                diffHandler: async (ctx, diff) => {\n                    // HANDLE new fingerprint (only when the fingerprint sha is updated)\n                    return renderDiffSnippet(ctx, diff);\n                },\n            },\n        ),\n    )\n```\n\nIn the example above, we have a module which computes a set of fingerprints on every `Push` (one of them is named `backpack-react-scripts`).  The pack also notices if a newly\ncomputed fingerprint has either changed, or is different from a `goal` state.  It will then present the user with options to do things like:\n\n* set new targets \n* update a project to be in sync with a target fingerprint\n* apply a fingerprint to a project for the first time\n* broadcast a message to all projects out of sync with the fingerprint\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist/sdm-pack-fingerprints/issues\n\n## Development\n\nYou will need to install [node][] to build and test this project.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nUse the following package scripts to build, test, and perform other\ndevelopment tasks.\n\nCommand | Reason\n------- | ------\n`npm install` | install project dependencies\n`npm run build` | compile, test, lint, and generate docs\n`npm run lint` | run TSLint against the TypeScript\n`npm run compile` | generate types from GraphQL and compile TypeScript\n`npm test` | run tests\n`npm run autotest` | run tests every time a file changes\n`npm run clean` | remove files generated during build\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0a81a283aaed075ac4d35ee9327dcd672548408f","_id":"@atomist/sdm-pack-fingerprints@5.0.0-master.20190903060131","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-lkyFWXXFKFySPnfONVq5LFG6DIPFWNMZWVygV0lJPWcbAJChJ0GQa5dJBaUqu+EwszgN4ea0eJ8hHDW4AIujSw==","shasum":"c14cd1111232af0b9a739c24158eda3f3693cf80","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-fingerprints/-/sdm-pack-fingerprints-5.0.0-master.20190903060131.tgz","fileCount":119,"unpackedSize":2144431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbgJiCRA9TVsSAnZWagAAO8oP/3JYuO4eOECT2t+1gaMl\nwWm3EN5h0HQWMbB/gm0AAOrX+FcUsmN99MINqnRrz5mOAwt0/k5yB7PEGYLs\nA2Z7KT71NL+zqEvktF6MTZU+72Gsqr1g3gbAWMNqGKNYj+WiLmna6wf1m5My\nJbHcGwkestiX/brff+da/bP9pgYDfHOTnj1HZ2n3Z1CxY6SfigXIIWLa69LK\nC5KmU/oJDFR8t4pcEQfi9vOua1U55ZY3eDxVSIuWrTDs2MV1rxwkBv2w7Dg+\noRyySHzE0AWCFjXT9P2AxEiuR1b2lJaLxpyHer+LEA/JlUvXNlI0FnCk+Y3P\n/J84wVS69CWPA03aQD9UcIZ9X6UTDHeED2iiJCscantJUWidwSTEfCfl2Smm\nOBbvOv8B2XnkpTLVayAWwNZ+ap4Yb2qynA3TcfWZj4etQ/ps1yZPV+BrALcf\nVo7NbdseICGob2b+l9AKM0/qw0VP8bjkTZnPAzDpp2QuWLj/finvSY85eT2I\nDH2kTyjKy4hU9QFtzYX0tOMV+OJy8x0KT4LBspUMElMfG/H8UFYp83X+SzO5\n7EVJZleHlyDguUCXHNGJEAdSGSrXZnzk8GVf9DeDWolS923xpL541rgbQQ8I\nyKdmIQ7Ou8zLL6NdPG+s/BDEMmgB0zP7mcGgZx6iV3Bg5GKhxqFrwwVDYnKd\nh1dw\r\n=pgOw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEj9gVKI5tuTdNOLJRHAPiWijHrQlTDWpP5YoOZIXz5uAiBdQ53RGdAz0oZo0xi5NEOEzHI/hhjq79/v2LVBnvf7xw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-fingerprints_5.0.0-master.20190903060131_1567490657286_0.3942063557138056"},"_hasShrinkwrap":false}},"time":{"created":"2018-07-16T06:23:00.264Z","0.1.0-20180716062100":"2018-07-16T06:23:00.580Z","modified":"2023-02-23T17:59:46.874Z","0.1.0-20180716064044":"2018-07-16T06:42:52.944Z","0.1.1":"2018-07-19T07:46:55.656Z","0.1.2":"2018-07-19T08:06:33.812Z","0.1.3-polishing.20180727002807":"2018-07-27T00:30:16.033Z","0.1.3-polishing.20180727003719":"2018-07-27T00:39:19.967Z","0.1.3-polishing.20180727024619":"2018-07-27T02:48:08.831Z","0.1.3-20180727025051":"2018-07-27T02:52:49.119Z","0.1.3-20180803015453":"2018-08-03T01:56:24.936Z","0.1.3-20180803015639":"2018-08-03T01:58:40.475Z","0.1.4":"2018-08-09T23:37:29.270Z","0.1.5":"2018-08-09T23:49:32.651Z","0.1.6":"2018-08-09T23:53:55.947Z","0.1.7":"2018-08-10T00:05:00.767Z","0.1.9":"2018-08-10T02:12:03.652Z","0.1.10":"2018-08-10T22:41:37.073Z","0.1.11":"2018-08-10T22:51:25.626Z","0.1.11-20180810225147":"2018-08-10T22:53:47.993Z","0.1.12":"2018-08-11T04:53:47.749Z","0.1.13":"2018-08-11T08:28:49.437Z","0.1.14":"2018-08-14T01:07:35.300Z","0.1.15":"2018-08-14T01:17:02.799Z","0.1.16":"2018-08-14T01:41:44.594Z","0.1.16-M.3.20180905053450":"2018-09-05T05:36:40.984Z","0.2.0":"2018-09-05T23:17:15.984Z","0.2.0-master.20180905233311":"2018-09-05T23:35:16.476Z","0.2.0-master.20180910014348":"2018-09-10T01:46:12.831Z","0.2.0-master.20180912020436":"2018-09-12T02:06:57.074Z","0.2.0-messages.20180912074056":"2018-09-12T07:42:44.038Z","0.2.0-messages.20180912142203":"2018-09-12T14:24:16.216Z","0.2.0-master.20180912150059":"2018-09-12T15:02:56.113Z","0.2.0-master.20180912165711":"2018-09-12T16:59:03.476Z","0.2.0-graphclient.20180912174414":"2018-09-12T17:46:05.126Z","0.2.0-master.20180912211547":"2018-09-12T21:17:49.145Z","0.2.0-master.20180912215023":"2018-09-12T21:52:41.546Z","0.2.0-master.20180912225051":"2018-09-12T22:59:05.149Z","0.2.0-atomist-update-branch-master-1536837416403.20180913111710":"2018-09-13T11:23:09.902Z","0.2.0-master.20180913112341":"2018-09-13T11:29:13.327Z","0.2.0-master.20180913195353":"2018-09-13T19:56:22.547Z","0.3.0-master.20180913202611":"2018-09-13T20:28:39.993Z","0.3.1":"2018-09-14T05:41:04.882Z","0.4.0":"2018-09-14T06:00:18.100Z","0.4.0-rewrite-imports-1536933556152.20180914142812":"2018-09-14T14:30:38.548Z","1.0.0-rewrite-imports-1536933556152.20180914143208":"2018-09-14T14:34:12.258Z","1.0.0-master.20180914143609":"2018-09-14T14:38:53.130Z","1.0.0-master.20180915023929":"2018-09-15T02:41:20.623Z","1.0.0-master.20180915035814":"2018-09-15T04:00:20.775Z","1.0.0-atomist-update-1.0.0-M.4-1537121780868.20180916181629":"2018-09-16T18:18:56.838Z","1.0.0-master.20180916182025":"2018-09-16T18:22:42.979Z","1.0.0-atomist-update-1.0.0-1537123146515.20180916183913":"2018-09-16T18:41:26.353Z","1.0.0-master.20180916184241":"2018-09-16T18:44:59.212Z","1.0.0-M.4":"2018-09-16T18:53:11.650Z","1.0.0-master.20180916230822":"2018-09-16T23:10:39.649Z","1.0.0-master.20180917204138":"2018-09-17T20:43:36.688Z","1.0.0-todo-ignore.20180918190425":"2018-09-18T19:06:35.512Z","1.0.0-master.20180919044242":"2018-09-19T04:45:10.310Z","1.0.0-master.20180919053125":"2018-09-19T05:33:58.988Z","1.0.0-master.20180920051115":"2018-09-20T05:13:20.980Z","1.0.0-master.20180920210545":"2018-09-20T21:08:45.063Z","1.0.0-atomist-update-1.0.0-M.5-1537996016697.20180926210706":"2018-09-26T21:11:04.579Z","1.0.0-master.20180926211220":"2018-09-26T21:14:41.965Z","1.0.0-M.5":"2018-09-26T21:53:19.755Z","1.0.0-master.20181008215050":"2018-10-08T21:52:47.090Z","1.0.0-master.20181009025911":"2018-10-09T03:01:15.480Z","1.0.0-master.20181010130129":"2018-10-10T13:04:04.513Z","1.1.0":"2018-10-12T02:43:02.519Z","1.0.0-master.20181012053810":"2018-10-12T05:39:53.745Z","1.0.0-atomist-update-branch-master-1539326909182.20181012064944":"2018-10-12T06:51:37.090Z","1.0.0-master.20181012065434":"2018-10-12T06:56:23.409Z","1.1.1":"2018-10-12T22:22:14.987Z","1.1.1-master.20181012222345":"2018-10-12T22:24:51.922Z","1.1.1-atomist-update-1.0.0-RC.1-1539609957300.20181015132658":"2018-10-15T13:28:16.647Z","1.1.1-master.20181015133055":"2018-10-15T13:32:23.399Z","1.0.0-RC.1":"2018-10-15T13:34:00.827Z","1.2.0":"2018-10-16T18:43:48.425Z","1.2.0-master.20181016184603":"2018-10-16T18:47:23.977Z","1.2.0-atomist-update-1.0.0-RC.2-1540922088664.20181030175613":"2018-10-30T17:57:44.601Z","1.2.0-master.20181030175950":"2018-10-30T18:01:33.358Z","1.2.0-backpack.20181114125244":"2018-11-14T12:59:10.614Z","1.2.0-backpack.20181115235841":"2018-11-16T00:05:17.706Z","1.2.0-backpack.20181117075113":"2018-11-17T07:57:04.458Z","1.2.0-backpack.20181117095745":"2018-11-17T10:04:05.632Z","1.2.0-backpack.20181118071115":"2018-11-18T07:17:03.758Z","1.2.0-backpack.20181119200114":"2018-11-19T20:07:20.245Z","1.2.0-master.20181119202726":"2018-11-19T20:33:32.056Z","1.2.0-backpackrename.20181121213806":"2018-11-21T21:43:57.700Z","1.2.0-master.20181121214011":"2018-11-21T21:46:01.034Z","1.2.0-master.20181122025632":"2018-11-22T03:03:39.558Z","1.2.0-CodeSnippetAndLogbackSupport.20181122035604":"2018-11-22T04:02:20.035Z","1.2.0-CodeSnippetAndLogbackSupport.20181122171745":"2018-11-22T17:23:37.673Z","1.2.0-CodeSnippetAndLogbackSupport.20181123031231":"2018-11-23T03:18:34.639Z","1.2.0-master.20181123031943":"2018-11-23T03:25:38.130Z","1.2.0-master.20181123034444":"2018-11-23T03:50:54.017Z","1.2.0-master.20181123192736":"2018-11-23T19:34:05.496Z","1.2.0-master.20181123225428":"2018-11-23T23:00:24.578Z","1.3.0":"2018-11-24T00:42:15.504Z","1.3.0-master.20181124015338":"2018-11-24T02:00:53.716Z","1.3.0-atomist-update-latest-1543308909652.20181127090412":"2018-11-27T09:10:06.879Z","1.3.0-atomist-update-latest-1543326375228.20181127135108":"2018-11-27T13:59:58.255Z","1.3.0-master.20181127142716":"2018-11-27T14:33:20.806Z","1.3.0-master.20181128070835":"2018-11-28T07:14:29.443Z","1.3.0-master.20181205080847":"2018-12-05T08:14:32.505Z","1.3.0-master.20181205211922":"2018-12-05T21:26:02.636Z","1.3.0-master.20181206034002":"2018-12-06T03:46:20.019Z","1.3.0-master.20181207031054":"2018-12-07T03:17:47.306Z","1.3.0-master.20181207045251":"2018-12-07T05:00:10.738Z","1.3.0-master.20181207192753":"2018-12-07T19:36:13.458Z","1.3.0-master.20181207222143":"2018-12-07T22:29:10.870Z","1.3.0-master.20181207234603":"2018-12-07T23:52:13.504Z","1.3.0-registration.20181208033114":"2018-12-08T03:37:54.068Z","1.3.0-registration.20181208055935":"2018-12-08T06:06:06.999Z","1.3.0-ipcrm-apply-dockerbase-fingerprint.20181210183625":"2018-12-10T18:42:33.803Z","1.3.0-ipcrm-apply-dockerbase-fingerprint.20181211042347":"2018-12-11T04:30:14.499Z","1.3.0-registration.20181211081234":"2018-12-11T08:18:48.504Z","1.3.0-master.20181211083706":"2018-12-11T08:42:42.500Z","1.3.0-docker-path.20181211220142":"2018-12-11T22:09:08.969Z","1.3.0-ipcrm-apply-dockerbase-fingerprint.20181214041012":"2018-12-14T04:17:06.047Z","1.3.0-master.20181214204840":"2018-12-14T20:54:40.367Z","1.3.0-master.20181215051253":"2018-12-15T05:19:13.611Z","1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216152415":"2018-12-16T15:31:04.949Z","1.3.0-ipcrm-apply-dockerbase-fingerprint.20181216154206":"2018-12-16T15:48:43.780Z","1.3.0-master.20181216201853":"2018-12-16T20:25:46.782Z","1.3.0-master.20181217050842":"2018-12-17T05:15:28.917Z","1.3.0-master.20181218044239":"2018-12-18T04:48:34.594Z","1.3.0-master.20181219023944":"2018-12-19T02:45:53.908Z","1.3.0-master.20181219025119":"2018-12-19T02:57:30.736Z","1.3.0-targetrepos.20181220011950":"2018-12-20T01:25:23.732Z","1.3.0-targetrepos.20181221013736":"2018-12-21T01:45:40.469Z","1.4.0-targetrepos.20181221014203":"2018-12-21T01:49:22.760Z","1.4.0-targetrepos.20181221015708":"2018-12-21T02:04:25.575Z","1.4.0-targetrepos.20181222013209":"2018-12-22T01:40:06.053Z","1.4.0-targetrepos.20181222015221":"2018-12-22T01:59:44.837Z","1.4.0-targetrepos.20181223221742":"2018-12-23T22:25:16.846Z","1.4.0-targetrepos.20181225013517":"2018-12-25T01:42:15.844Z","1.4.0-targetrepos.20181225032056":"2018-12-25T03:28:03.087Z","1.4.0-master.20181225033151":"2018-12-25T03:38:41.819Z","1.4.0":"2018-12-25T05:55:24.266Z","1.4.1-master.20181227001124":"2018-12-27T00:18:48.325Z","1.4.1-master.20181229074815":"2018-12-29T07:55:35.385Z","1.4.1-master.20181229084425":"2018-12-29T08:51:40.617Z","1.4.1-master.20190101014127":"2019-01-01T01:49:20.623Z","1.4.1":"2019-01-01T01:50:18.441Z","1.4.2-master.20190102020926":"2019-01-02T02:16:37.490Z","1.4.2":"2019-01-02T02:53:37.102Z","1.4.3-master.20190103084454":"2019-01-03T08:51:30.107Z","1.4.3-apply-all.20190105055330":"2019-01-05T06:00:05.502Z","1.4.3-apply-all.20190107023406":"2019-01-07T02:41:50.850Z","1.4.3-apply-all.20190107025547":"2019-01-07T03:03:35.417Z","1.4.3-apply-all.20190107074329":"2019-01-07T07:50:20.515Z","1.4.3-apply-all.20190108055037":"2019-01-08T05:57:55.206Z","1.4.3-master.20190108060259":"2019-01-08T06:09:58.305Z","1.4.3":"2019-01-08T06:16:02.602Z","1.4.4-master.20190110020615":"2019-01-10T02:14:46.089Z","1.4.4":"2019-01-10T02:15:33.717Z","1.4.5-master.20190111052317":"2019-01-11T05:31:20.730Z","1.4.5":"2019-01-11T06:31:17.267Z","1.4.6-master.20190114174130":"2019-01-14T17:49:41.559Z","1.4.6":"2019-01-14T18:23:58.843Z","1.4.7-master.20190123043801":"2019-01-23T04:45:50.150Z","1.4.7-master.20190123044218":"2019-01-23T04:49:55.821Z","1.4.7":"2019-01-23T04:50:58.580Z","1.4.8-updates.20190125122341":"2019-01-25T12:31:57.797Z","1.4.8-updates.20190125123722":"2019-01-25T12:44:47.117Z","2.0.0-updates.20190125133739":"2019-01-25T13:45:02.512Z","2.0.0-updates.20190125141235":"2019-01-25T14:20:08.645Z","2.0.0-updates.20190208003156":"2019-02-08T00:39:55.261Z","2.0.0-master.20190208071133":"2019-02-08T07:19:35.623Z","2.0.0-slim.choices.20190208210917":"2019-02-08T21:16:56.827Z","2.0.0-slim.choices.20190214063425":"2019-02-14T06:43:45.900Z","2.0.0-slim.choices.20190221220528":"2019-02-21T22:15:38.198Z","2.0.0-atomist-update-latest-20190320185814.20190320194833":"2019-03-20T20:01:12.146Z","2.0.0-master.20190320200436":"2019-03-20T20:14:26.427Z","2.0.0-master.20190322010508":"2019-03-22T01:14:06.688Z","2.0.0-slim.choices.20190322021548":"2019-03-22T02:26:25.890Z","2.0.0-master.20190322183828":"2019-03-22T18:47:41.100Z","2.0.0":"2019-03-23T00:10:55.363Z","2.0.1-master.20190327211108":"2019-03-27T21:21:02.836Z","2.0.1":"2019-03-27T21:44:57.996Z","2.0.2-master.20190329005645":"2019-03-29T01:05:57.347Z","2.0.2":"2019-03-29T20:54:36.783Z","2.0.3-master.20190410043635":"2019-04-10T04:45:30.849Z","2.0.3-master.20190410054626":"2019-04-10T05:54:31.201Z","2.0.3":"2019-04-10T05:55:32.819Z","2.0.4-refactor-command.20190416223314":"2019-04-16T22:42:07.049Z","2.0.4-refactor-command.20190417011604":"2019-04-17T01:24:57.906Z","2.0.4-refactor-command.20190417060051":"2019-04-17T06:09:10.892Z","2.0.4-master.20190417063352":"2019-04-17T06:41:43.887Z","2.0.4-master.20190418004041":"2019-04-18T00:49:14.494Z","2.0.4":"2019-04-18T01:38:16.610Z","2.0.5-master.20190424030718":"2019-04-24T03:17:10.708Z","2.0.5-master.20190426013342":"2019-04-26T01:43:41.622Z","2.0.5-master.20190427072209":"2019-04-27T07:30:44.873Z","2.0.5-master.20190428074803":"2019-04-28T08:09:38.867Z","2.0.5-master.20190430191342":"2019-04-30T19:35:34.205Z","2.0.5":"2019-04-30T19:39:12.267Z","2.0.5-customingestion.20190501003030":"2019-05-01T00:41:51.382Z","2.0.5-customingestion.20190505065635":"2019-05-05T07:06:02.235Z","2.0.5-customingestion.20190508055419":"2019-05-08T05:59:15.489Z","3.0.0-customingestion.20190508082003":"2019-05-08T08:25:05.192Z","3.0.0-customingestion.20190508091220":"2019-05-08T09:18:55.541Z","3.0.0-customingestion.20190508212125":"2019-05-08T21:27:10.301Z","3.0.0-master.20190508214550":"2019-05-08T21:51:53.519Z","3.0.0-master.20190509050455":"2019-05-09T05:10:00.975Z","3.0.0":"2019-05-09T05:15:04.563Z","3.0.1-master.20190509202631":"2019-05-09T20:32:28.049Z","3.0.1":"2019-05-09T20:34:28.228Z","3.0.2-master.20190511023846":"2019-05-11T02:44:40.258Z","3.0.2-master.20190512014018":"2019-05-12T01:45:21.977Z","3.0.2":"2019-05-14T04:30:59.596Z","3.0.3-converge.20190516215427":"2019-05-16T22:00:48.805Z","3.0.3-converge.20190516223042":"2019-05-16T22:36:34.928Z","3.0.3-converge.20190518194526":"2019-05-18T19:51:26.255Z","3.0.3-converge.20190518212054":"2019-05-18T21:25:52.177Z","3.0.3-converge.20190518233713":"2019-05-18T23:41:35.229Z","3.0.3-converge.20190518233608":"2019-05-18T23:42:17.591Z","3.0.3-converge.20190518234954":"2019-05-18T23:55:50.282Z","3.0.3-converge.20190520183240":"2019-05-20T18:40:12.019Z","3.0.3-converge.20190520192749":"2019-05-20T19:32:32.406Z","3.0.3-converge.20190520205007":"2019-05-20T20:57:05.054Z","3.0.3-converge.20190520205936":"2019-05-20T21:04:04.662Z","3.0.3-atomic.20190522010328":"2019-05-22T01:08:33.044Z","3.0.3-atomic.20190522185956":"2019-05-22T19:07:47.442Z","3.0.3-atomic.20190522194334":"2019-05-22T19:50:34.509Z","3.0.3-atomic.20190523022516":"2019-05-23T02:31:20.288Z","3.0.3-master.20190523074904":"2019-05-23T07:54:21.874Z","3.0.3":"2019-05-23T15:23:06.078Z","3.0.3-atomic.20190523170331":"2019-05-23T17:08:57.726Z","3.0.3-atomic.20190523171149":"2019-05-23T17:17:40.022Z","3.0.4-master.20190523211118":"2019-05-23T21:17:37.118Z","3.0.4-master.20190523230150":"2019-05-23T23:08:03.399Z","3.0.4-master.20190528055121":"2019-05-28T05:54:08.217Z","3.0.4-master.20190528060120":"2019-05-28T06:02:38.948Z","3.0.4-master.20190529030444":"2019-05-29T03:06:00.524Z","3.0.4":"2019-05-29T03:11:16.369Z","3.0.4-v3fingerprint.20190602045744":"2019-06-02T04:59:00.355Z","3.0.4-v3fingerprint.20190602050600":"2019-06-02T05:07:32.167Z","3.0.4-v3fingerprint.20190604070437":"2019-06-04T07:06:35.513Z","3.0.4-v3fingerprint.20190605030518":"2019-06-05T03:07:15.331Z","3.0.5-master.20190605073456":"2019-06-05T07:36:24.936Z","3.0.5":"2019-06-05T07:37:28.470Z","3.0.6-master.20190605233010":"2019-06-05T23:31:28.437Z","3.0.6-master.20190606010900":"2019-06-06T01:10:11.626Z","3.0.6-master.20190606011352":"2019-06-06T01:15:04.916Z","3.0.6-master.20190606053011":"2019-06-06T05:33:04.076Z","3.0.6":"2019-06-06T06:05:30.069Z","3.0.7-master.20190606180649":"2019-06-06T18:08:11.050Z","3.0.7":"2019-06-06T19:43:13.906Z","3.0.8-consistent-messages.20190607123800":"2019-06-07T12:39:33.193Z","3.0.8-master.20190610034702":"2019-06-10T03:49:07.232Z","3.0.8":"2019-06-10T03:50:53.818Z","3.0.9-master.20190610130034":"2019-06-10T13:02:19.895Z","3.0.9-master.20190611021631":"2019-06-11T02:19:11.658Z","3.0.9-master.20190611032305":"2019-06-11T03:24:34.074Z","3.0.9":"2019-06-11T03:31:40.552Z","3.0.10-master.20190611081131":"2019-06-11T08:12:55.907Z","3.0.10-master.20190612013322":"2019-06-12T01:34:46.266Z","3.0.10":"2019-06-12T01:36:07.282Z","3.1.0-master.20190612072911":"2019-06-12T07:31:38.862Z","3.1.0-master.20190612073230":"2019-06-12T07:34:03.905Z","3.1.0-master.20190612073521":"2019-06-12T07:40:21.820Z","3.1.0-master.20190612075058":"2019-06-12T07:53:01.500Z","3.1.0-master.20190613080415":"2019-06-13T08:07:00.167Z","3.1.0-master.20190613085807":"2019-06-13T09:01:20.940Z","3.1.0-master.20190614004255":"2019-06-14T00:44:24.215Z","3.1.0":"2019-06-14T00:49:54.644Z","3.1.1-master.20190614042717":"2019-06-14T04:28:49.469Z","3.1.1-master.20190614043226":"2019-06-14T04:33:55.194Z","3.1.1":"2019-06-14T04:35:00.039Z","3.1.2-featurediffhandlers.20190615232207":"2019-06-15T23:24:08.404Z","3.1.2-featurediffhandlers.20190616182921":"2019-06-16T18:32:03.881Z","3.1.2-master.20190619160012":"2019-06-19T16:02:06.335Z","3.1.2-master.20190619162000":"2019-06-19T16:21:23.224Z","3.1.2-master.20190619162152":"2019-06-19T16:23:14.474Z","3.1.2-master.20190619162646":"2019-06-19T16:28:47.528Z","3.1.2-featurediffhandlers.20190627010809":"2019-06-27T01:09:35.726Z","3.1.2-featurediffhandlers.20190627020748":"2019-06-27T02:10:28.371Z","3.1.2-master.20190627022447":"2019-06-27T02:26:24.815Z","3.1.2":"2019-06-27T02:28:16.927Z","3.1.3-master.20190627023512":"2019-06-27T02:36:33.962Z","3.1.3":"2019-06-27T02:37:37.417Z","3.1.4-file-feature.20190701180015":"2019-07-01T18:01:47.268Z","3.1.4-file-feature.20190701182944":"2019-07-01T18:31:16.301Z","3.1.4-file-feature.20190701215847":"2019-07-01T22:01:22.345Z","3.1.4-master.20190703172504":"2019-07-03T17:26:31.680Z","3.1.4-noselector.20190704053319":"2019-07-04T05:35:25.331Z","3.1.4-master.20190704054837":"2019-07-04T05:50:44.956Z","3.1.4":"2019-07-04T06:09:28.339Z","3.1.5-master.20190706031206":"2019-07-06T03:14:30.401Z","3.1.5-master.20190708032952":"2019-07-08T03:31:25.970Z","3.1.5-master.20190708091203":"2019-07-08T09:14:29.153Z","3.1.5-atomist-update-latest-20190708194931.20190708195125":"2019-07-08T19:56:26.006Z","3.1.5-master.20190708201351":"2019-07-08T20:17:19.798Z","3.1.5-ipcrm-listfp-sdm.20190709145239":"2019-07-09T14:55:33.191Z","3.1.5-ipcrm-listfp-sdm.20190709161701":"2019-07-09T16:18:23.330Z","3.1.5-atomist-update-latest-20190709164042.20190709165309":"2019-07-09T16:56:25.621Z","3.1.5-master.20190709171955":"2019-07-09T17:21:37.331Z","3.2.0-master.20190709194412":"2019-07-09T19:45:57.857Z","3.2.0":"2019-07-09T19:46:54.348Z","3.1.5-ipcrm-listfp-sdm.20190709231251":"2019-07-09T23:14:45.045Z","3.2.0-cljeditors-index.20190709232626":"2019-07-09T23:28:28.453Z","3.2.0-cljeditors-index.20190709232706":"2019-07-09T23:28:35.925Z","3.2.1-master.20190710025834":"2019-07-10T02:59:56.465Z","3.2.1":"2019-07-10T03:01:36.719Z","3.2.2-master.20190710050726":"2019-07-10T05:08:43.092Z","3.2.2":"2019-07-10T06:29:04.771Z","3.2.2-nortissej.docurl.20190710151425":"2019-07-10T15:17:14.572Z","3.2.3-master.20190712040952":"2019-07-12T04:12:04.665Z","3.2.3-master.20190712041414":"2019-07-12T04:15:25.834Z","3.2.3-master.20190712041903":"2019-07-12T04:20:13.970Z","3.2.3-headcommitsonly.20190712225544":"2019-07-12T22:57:01.777Z","4.0.0-headcommitsonly.20190714151945":"2019-07-14T15:20:52.628Z","4.0.0-headcommitsonly.20190715182938":"2019-07-15T18:32:56.641Z","4.0.0-headcommitsonly.20190716045205":"2019-07-16T04:53:39.588Z","4.0.0-master.20190716123307":"2019-07-16T12:34:45.036Z","4.0.0-master.20190716161109":"2019-07-16T16:12:52.797Z","4.0.0":"2019-07-16T16:22:22.383Z","4.0.1-master.20190717095528":"2019-07-17T09:57:26.867Z","4.0.1-ipcrm-listfp-sdm.20190717095933":"2019-07-17T10:01:31.890Z","4.0.1-master.20190717100750":"2019-07-17T10:09:20.612Z","4.0.1-master.20190719003158":"2019-07-19T00:33:51.173Z","4.0.1-master.20190720002945":"2019-07-20T00:32:34.078Z","4.0.1-stats.20190722081758":"2019-07-22T08:20:14.727Z","4.0.1-master.20190723063638":"2019-07-23T06:38:54.675Z","4.0.1":"2019-07-23T06:39:55.171Z","4.0.2-master.20190723175354":"2019-07-23T17:56:36.310Z","4.0.2":"2019-07-23T18:02:20.862Z","4.0.3-master.20190725150228":"2019-07-25T15:04:39.605Z","4.0.3-master.20190725205300":"2019-07-25T20:55:05.764Z","4.0.3-master.20190726053018":"2019-07-26T05:32:30.121Z","4.0.3-master.20190726075222":"2019-07-26T07:55:08.691Z","4.0.3-type-fp.20190727222628":"2019-07-27T22:28:41.492Z","4.0.3-issue-105-106.20190729095146":"2019-07-29T09:54:07.225Z","4.0.3-issue-105-106.20190729212407":"2019-07-29T21:26:28.349Z","4.0.3-issue-105-106.20190729214307":"2019-07-29T21:45:08.835Z","4.0.3-issue-105-106.20190729215816":"2019-07-29T22:00:34.863Z","4.0.3-issue-105-106.20190729221041":"2019-07-29T22:12:37.033Z","4.0.3-master.20190730052449":"2019-07-30T05:27:16.481Z","4.0.3-issue-105-106.20190730063513":"2019-07-30T06:37:42.110Z","4.0.3-master.20190730084140":"2019-07-30T08:43:55.238Z","4.0.3-remove-global.20190730224432":"2019-07-30T22:47:10.125Z","4.0.3-remove-global.20190731093250":"2019-07-31T09:34:54.002Z","4.0.3-remove-global.20190731110748":"2019-07-31T11:10:09.606Z","4.0.3-remove-global.20190731111928":"2019-07-31T11:21:50.567Z","4.0.3-remove-global.20190731160727":"2019-07-31T16:10:18.626Z","4.0.3-remove-global.20190731164525":"2019-07-31T16:47:21.806Z","4.0.3-remove-global.20190731204018":"2019-07-31T20:42:36.476Z","4.0.3-remove-global.20190731211901":"2019-07-31T21:21:02.811Z","4.0.3-remove-global.20190801110424":"2019-08-01T11:07:23.512Z","4.0.3-remove-global.20190801110906":"2019-08-01T11:11:56.261Z","4.0.3-apply-target-fingerprint-1564657700366.20190801110954":"2019-08-01T11:13:00.107Z","4.0.3-remove-global.20190801111625":"2019-08-01T11:18:29.785Z","4.0.3-remove-global.20190801154049":"2019-08-01T15:43:26.411Z","4.0.3-remove-global.20190801175047":"2019-08-01T17:53:44.328Z","4.0.3-remove-global.20190801193608":"2019-08-01T19:38:53.393Z","4.0.3-remove-global.20190801201410":"2019-08-01T20:17:19.495Z","4.0.3-remove-global.20190802064812":"2019-08-02T06:50:25.168Z","4.0.3-remove-global.20190802081103":"2019-08-02T08:13:20.677Z","4.0.3-remove-global.20190802081443":"2019-08-02T08:17:01.931Z","4.0.3-remove-global.20190802082056":"2019-08-02T08:23:24.636Z","4.0.3-remove-global.20190802091023":"2019-08-02T09:12:48.394Z","4.0.3-remove-global.20190802091704":"2019-08-02T09:19:17.873Z","4.0.3-remove-global.20190802092748":"2019-08-02T09:30:18.128Z","4.0.3-remove-global.20190802101637":"2019-08-02T10:18:51.396Z","4.0.3-remove-global.20190802151008":"2019-08-02T15:12:27.397Z","4.0.3-master.20190802151926":"2019-08-02T15:22:08.585Z","4.0.3-master.20190802152058":"2019-08-02T15:23:36.486Z","4.0.3-master.20190802175124":"2019-08-02T17:54:04.695Z","4.0.3-master.20190802175714":"2019-08-02T17:59:46.452Z","4.0.3-to-policy.20190802212149":"2019-08-02T21:24:08.536Z","4.0.3-to-policy.20190802213945":"2019-08-02T21:41:52.826Z","4.0.3-to-policy.20190802214756":"2019-08-02T21:50:14.298Z","4.0.3-to-policy.20190802215553":"2019-08-02T21:58:16.265Z","4.0.3-to-policy.20190803085459":"2019-08-03T08:57:28.299Z","4.0.3-multi.20190808041710":"2019-08-08T04:20:25.456Z","4.0.3-multi.20190808053809":"2019-08-08T05:41:52.179Z","4.0.3-multi.20190808070529":"2019-08-08T07:09:16.174Z","4.0.3-multi.20190808080339":"2019-08-08T08:06:11.507Z","4.0.3-multi.20190808095000":"2019-08-08T09:53:39.472Z","4.0.3-master.20190809062146":"2019-08-09T06:24:37.950Z","4.0.3-master.20190809062336":"2019-08-09T06:27:10.368Z","4.0.3-to-policy.20190809105436":"2019-08-09T10:57:37.822Z","4.0.3-master.20190809110430":"2019-08-09T11:07:22.505Z","4.0.3":"2019-08-09T11:19:59.971Z","4.0.3-no-from.20190809124216":"2019-08-09T12:46:05.632Z","4.0.4-no-from.20190809192822":"2019-08-09T19:31:58.135Z","4.0.4-master.20190809192824":"2019-08-09T19:32:11.957Z","4.0.4":"2019-08-09T21:43:04.276Z","4.0.5-no-from.20190809214440":"2019-08-09T21:48:01.919Z","4.0.5-master.20190809221814":"2019-08-09T22:20:43.420Z","4.0.5-no-from.20190809221807":"2019-08-09T22:21:27.297Z","4.0.3-no-from.20190816140726":"2019-08-16T14:09:46.700Z","4.0.5-no-from.20190816141537":"2019-08-16T14:18:07.890Z","5.0.0-no-from.20190816150728":"2019-08-16T15:09:48.696Z","5.0.0-no-from.20190819144116":"2019-08-19T14:43:32.013Z","5.0.0-no-from.20190819150809":"2019-08-19T15:11:21.598Z","4.0.5-build.20190820002443":"2019-08-20T00:27:09.095Z","4.0.5-master.20190820002659":"2019-08-20T00:29:14.131Z","5.0.0-no-from.20190820002754":"2019-08-20T00:30:22.489Z","4.0.5-one-aspect.20190820014017":"2019-08-20T01:42:22.829Z","5.0.0-no-from.20190820094938":"2019-08-20T09:51:50.033Z","4.0.5-no-base-aspect.20190820163433":"2019-08-20T16:36:51.302Z","5.0.0-no-from.20190820173431":"2019-08-20T17:36:47.211Z","4.0.5-master.20190820173427":"2019-08-20T17:37:05.460Z","4.0.5-no-base-aspect.20190820182446":"2019-08-20T18:27:04.702Z","4.0.5-simplify.20190820184117":"2019-08-20T18:43:25.541Z","4.0.5-master.20190820184139":"2019-08-20T18:43:55.121Z","4.0.5-simplify-typing.20190820190946":"2019-08-20T19:11:55.066Z","4.0.5-master.20190821001652":"2019-08-21T00:22:05.128Z","5.0.0-no-from.20190821074558":"2019-08-21T07:49:00.310Z","5.0.0-no-from.20190821075021":"2019-08-21T07:52:52.341Z","5.0.0-no-from.20190821095808":"2019-08-21T10:00:41.286Z","5.0.0-no-from.20190821100018":"2019-08-21T10:02:51.446Z","5.0.0-no-from.20190821100628":"2019-08-21T10:08:54.795Z","5.0.0-master.20190821102112":"2019-08-21T10:23:30.817Z","5.0.0-master.20190821102259":"2019-08-21T10:26:07.202Z","5.0.0-master.20190821160940":"2019-08-21T16:12:35.933Z","5.0.0-master.20190821164939":"2019-08-21T16:51:58.193Z","5.0.0-master.20190821165959":"2019-08-21T17:02:16.726Z","5.0.0-master.20190821171625":"2019-08-21T17:18:50.300Z","5.0.0-master.20190821201638":"2019-08-21T20:18:48.973Z","5.0.0-update-runner.20190821211112":"2019-08-21T21:14:04.155Z","5.0.0-master.20190822000651":"2019-08-22T00:09:29.405Z","5.0.0-master.20190822065338":"2019-08-22T06:56:47.349Z","5.0.0-master.20190822065724":"2019-08-22T07:00:35.955Z","5.0.0-master.20190822082751":"2019-08-22T08:29:51.904Z","5.0.0-update-runner.20190822161343":"2019-08-22T16:16:41.423Z","5.0.0-master.20190822162743":"2019-08-22T16:30:11.657Z","5.0.0-master.20190822232250":"2019-08-22T23:25:45.819Z","5.0.0-master.20190823073847":"2019-08-23T07:41:18.460Z","5.0.0-master.20190823093033":"2019-08-23T09:33:17.580Z","5.0.0-master.20190823120226":"2019-08-23T12:04:48.273Z","5.0.0-master.20190823120718":"2019-08-23T12:10:34.470Z","5.0.0-master.20190823140902":"2019-08-23T14:11:28.523Z","5.0.0-master.20190823143131":"2019-08-23T14:34:04.739Z","5.0.0-master.20190823143727":"2019-08-23T14:40:37.891Z","5.0.0-master.20190823150135":"2019-08-23T15:04:25.675Z","5.0.0-master.20190823150500":"2019-08-23T15:07:38.533Z","5.0.0-master.20190823150530":"2019-08-23T15:07:49.299Z","5.0.0-set-publish.20190823162648":"2019-08-23T17:09:55.164Z","5.0.0-master.20190824231014":"2019-08-24T23:12:34.969Z","5.0.0-master.20190824232610":"2019-08-24T23:28:33.343Z","5.0.0-master.20190825000414":"2019-08-25T00:06:48.554Z","5.0.0-master.20190825104007":"2019-08-25T10:42:32.052Z","5.0.0-master.20190825151449":"2019-08-25T15:17:18.961Z","5.0.0-master.20190825210309":"2019-08-25T21:05:54.671Z","5.0.0-master.20190825234820":"2019-08-25T23:51:07.668Z","5.0.0-master.20190826010039":"2019-08-26T01:03:37.867Z","5.0.0-master.20190826082455":"2019-08-26T08:27:09.492Z","5.0.0-master.20190826234017":"2019-08-26T23:42:47.061Z","5.0.0-master.20190827084147":"2019-08-27T08:43:52.079Z","5.0.0-master.20190827103907":"2019-08-27T10:41:56.644Z","5.0.0-master.20190827163810":"2019-08-27T16:40:56.559Z","5.0.0-master.20190827183320":"2019-08-27T18:35:41.673Z","5.0.0-master.20190827183529":"2019-08-27T18:37:53.850Z","5.0.0-master.20190827193312":"2019-08-27T19:35:28.737Z","5.0.0-master.20190827220149":"2019-08-27T22:04:12.580Z","5.0.0-master.20190827220717":"2019-08-27T22:09:42.307Z","5.0.0-master.20190828075322":"2019-08-28T07:56:41.168Z","5.0.0-master.20190828102730":"2019-08-28T10:31:08.060Z","5.0.0-master.20190829084907":"2019-08-29T08:51:55.497Z","5.0.0-master.20190829110839":"2019-08-29T11:11:21.375Z","5.0.0-master.20190829133639":"2019-08-29T13:39:07.720Z","5.0.0-master.20190829154621":"2019-08-29T15:49:25.942Z","5.0.0-master.20190829154948":"2019-08-29T15:52:48.736Z","5.0.0-dynamic-aspects.20190830084158":"2019-08-30T08:44:21.619Z","5.0.0-dynamic-aspects.20190830084807":"2019-08-30T08:50:22.465Z","5.0.0-master.20190830145241":"2019-08-30T14:55:08.796Z","5.0.0-dynamic-aspects.20190830151145":"2019-08-30T15:14:34.099Z","5.0.0-master.20190903060131":"2019-09-03T06:04:17.516Z"},"maintainers":[{"email":"neil.prosser+npmjs@gmail.com","name":"neilprosser"},{"email":"npm@atomist.com","name":"atomist-bot"},{"email":"cd@atomist.com","name":"cdupuis"},{"email":"slimslenderslacks@gmail.com","name":"slimslenderslacks"}],"description":"an Atomist SDM Extension Pack for fingerprinting code","homepage":"https://github.com/atomist/sdm-pack-fingerprints#readme","keywords":["atomist","automation","sdm","clojure","fingerprints"],"repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-fingerprints.git"},"author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"bugs":{"url":"https://github.com/atomist/sdm-pack-fingerprints/issues"},"license":"Apache-2.0","readme":"","readmeFilename":""}